Task: | Tietoverkko |
Sender: | jmarttinen |
Submission time: | 2021-10-08 09:59:43 +0300 |
Language: | C++ (C++11) |
Status: | READY |
Result: | 25 |
group | verdict | score |
---|---|---|
#1 | ACCEPTED | 10 |
#2 | ACCEPTED | 15 |
#3 | TIME LIMIT EXCEEDED | 0 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | ACCEPTED | 0.01 s | 1, 2, 3 | details |
#2 | ACCEPTED | 0.59 s | 2, 3 | details |
#3 | TIME LIMIT EXCEEDED | -- | 3 | details |
Code
#include <algorithm> #include <iostream> #include <map> #include <set> #include <vector> using namespace std; vector<pair<int, pair<int,int>>> network; map<int, set<int>> graph; long search(int node, int ignoredNode) { if (graph[node].size() <= 1) { return 1; } long s = 1; for (auto n : graph[node]) { if (n == ignoredNode) { continue; } s += search(n, node); } return s; } int main() { int n, a, b, d; long s = 0; cin >> n; for (int i=1; i<n; i++) { graph[i] = set<int>(); } for (int i=0; i<n-1; i++) { cin >> a >> b >> d; graph[a].insert(b); graph[b].insert(a); network.push_back(pair<int, pair<int,int>>(d, pair<int,int>(a,b))); } sort(network.begin(), network.end()); long l, r; for (auto edge: network) { l = 1, r = 1; d = edge.first; a = edge.second.first, b = edge.second.second; graph[a].erase(b); graph[b].erase(a); for (auto node: graph[a]) { l += search(node, a); } for (auto node: graph[b]) { r += search(node, b); } s += l*r*d; } cout << s; }
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: TIME LIMIT EXCEEDED
input |
---|
200000 1 2 613084013 1 3 832364259 2 4 411999902 3 5 989696303 ... |
correct output |
---|
1080549209850010931 |
user output |
---|
(empty) |