| Task: | Tietoverkko |
| Sender: | motsgar |
| Submission time: | 2021-10-17 00:08:13 +0300 |
| Language: | C++ (C++17) |
| Status: | READY |
| Result: | 100 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 10 |
| #2 | ACCEPTED | 15 |
| #3 | ACCEPTED | 75 |
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.01 s | 1, 2, 3 | details |
| #2 | ACCEPTED | 0.01 s | 2, 3 | details |
| #3 | ACCEPTED | 0.74 s | 3 | details |
Compiler report
input/code.cpp: In function 'int main(int, char**)':
input/code.cpp:47:29: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if (depthMap.size() <= e[s])
input/code.cpp:66:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int j = 0; j < depthMap[i].size(); j++)
~~^~~~~~~~~~~~~~~~~~~~
input/code.cpp:73:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int k = 0; k < get<1>(computers[depthMap[i][j]]).size(); k++)
~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
input/code.cpp:75:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int l = 0; l < get<1>(computers[depthMap[i][j]])[k].second.size(); l++)
~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
input/code.cpp:81:43: warning: comparison b...Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct DefaultInt
{
int i = -1;
};
vector<vector<int>> depthMap;
int main(int argc, char **argv)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
ll total = 0;
int amount;
cin >> amount;
vector<tuple<pair<int, int>, vector<pair<int, vector<pair<int, int>>>>, vector<pair<int, int>>>> computers(amount);
for (int i = 0; i < amount - 1; i++)
{
int a, b, x;
cin >> a >> b >> x;
get<2>(computers[a - 1]).push_back(pair<int, int>(b - 1, x));
get<2>(computers[b - 1]).push_back(pair<int, int>(a - 1, x));
}
int x = 0;
queue<int> q;
vector<int> z(amount), e(amount);
z[x] = 1;
e[x] = 0;
q.push(x);
while (!q.empty())
{
int s = q.front();
q.pop(); // solmun s käsittely tähän
if (depthMap.size() <= e[s])
depthMap.resize(e[s] + 1);
depthMap[e[s]].push_back(s);
for (auto u : get<2>(computers[s]))
{
if (z[u.first])
continue;
z[u.first] = 1;
e[u.first] = e[s] + 1;
q.push(u.first);
get<0>(computers[u.first]).first = s; // previous element
get<0>(computers[u.first]).second = u.second; // distance to previous element
}
}
for (int i = depthMap.size() - 1; i > -1; i--)
{
for (int j = 0; j < depthMap[i].size(); j++)
{
pair<int, vector<pair<int, int>>> data;
map<int, DefaultInt> indexLookup;
int lengthUp = get<0>(computers[depthMap[i][j]]).second;
for (int k = 0; k < get<1>(computers[depthMap[i][j]]).size(); k++)
{
for (int l = 0; l < get<1>(computers[depthMap[i][j]])[k].second.size(); l++)
{
int lengthOne = min(get<1>(computers[depthMap[i][j]])[k].second[l].second, lengthUp);
total += ((ll)min(get<1>(computers[depthMap[i][j]])[k].second[l].second, get<1>(computers[depthMap[i][j]])[k].first)) * get<1>(computers[depthMap[i][j]])[k].second[l].first;
for (int m = k + 1; m < get<1>(computers[depthMap[i][j]]).size(); m++)
{
for (int n = 0; n < get<1>(computers[depthMap[i][j]])[m].second.size(); n++)
{
total += ((ll)min(get<1>(computers[depthMap[i][j]])[k].second[l].second, get<1>(computers[depthMap[i][j]])[m].second[n].second)) * get<1>(computers[depthMap[i][j]])[k].second[l].first * get<1>(computers[depthMap[i][j]])[m].second[n].first;
}
}
if (indexLookup[lengthOne].i == -1)
{
indexLookup[lengthOne].i = data.second.size();
data.second.push_back(make_pair(get<1>(computers[depthMap[i][j]])[k].second[l].first, lengthOne));
}
else
data.second[indexLookup[lengthOne].i].first += get<1>(computers[depthMap[i][j]])[k].second[l].first;
}
}
if (indexLookup[lengthUp].i == -1)
{
//cout << "lookup" << endl;
indexLookup[lengthUp].i = data.second.size();
data.second.push_back(make_pair(1, lengthUp));
}
else
data.second[indexLookup[lengthUp].i].first++;
data.first = lengthUp;
get<1>(computers[get<0>(computers[depthMap[i][j]]).first]).push_back(data);
/*
cout << "syvyys: " << i << ", index: " << depthMap[i][j] + 1 << ", ylös etäisyys: " << lengthUp
<< ", ylös index: " << get<0>(computers[depthMap[i][j]]).first + 1
<< ", data pituus: " << get<1>(computers[depthMap[i][j]]).size()
<< "" << endl;
*/
}
}
cout << total << "\n";
}
Test details
Test 1
Group: 1, 2, 3
Verdict: ACCEPTED
| input |
|---|
| 100 1 2 74 1 3 100 2 4 50 3 5 40 ... |
| correct output |
|---|
| 88687 |
| user output |
|---|
| 88687 |
Test 2
Group: 2, 3
Verdict: ACCEPTED
| input |
|---|
| 5000 1 2 613084013 1 3 832364259 2 4 411999902 3 5 989696303 ... |
| correct output |
|---|
| 1103702320243776 |
| user output |
|---|
| 1103702320243776 |
Test 3
Group: 3
Verdict: ACCEPTED
| input |
|---|
| 200000 1 2 613084013 1 3 832364259 2 4 411999902 3 5 989696303 ... |
| correct output |
|---|
| 1080549209850010931 |
| user output |
|---|
| 1080549209850010931 |
