Submission #557079

#TimeUsernameProblemLanguageResultExecution timeMemory
557079Olympia꿈 (IOI13_dreaming)C++17
0 / 100
70 ms25840 KiB
#include <bits/stdc++.h> #include "dreaming.h" using namespace std; vector<int> a, b, w; vector<vector<int> > adj; map<pair<int,int>,int> myMap; vector<bool> hasVisited; vector<int> parent; int find_farthest_node (int x, bool undo) { queue<pair<int,int> > q; q.push(make_pair(x, 0)); hasVisited[x] = true; parent[x] = -1; vector<int> nodes; vector<pair<int,int> > vec; while (!q.empty()) { pair<int,int> p = q.front(); nodes.push_back(p.first); vec.push_back(make_pair(p.second, p.first)); q.pop(); for (int j: adj[p.first]) { if (!hasVisited[j]) { q.push(make_pair(j, p.second + myMap[make_pair(j, p.first)])); parent[j] = p.first; hasVisited[j] = true; } } } sort(vec.begin(), vec.end()); reverse(vec.begin(), vec.end()); if (undo) { for (int j: nodes) { hasVisited[j] = false; } } return vec[0].second; } int travelTime (int N, int M, int L, int A[], int B[], int W[]) { a.resize(M), b.resize(M), w.resize(M), adj.resize(N), parent.resize(N); for (int i = 0; i < M; i++) { a[i] = A[i] - 1, b[i] = B[i] - 1, w[i] = W[i]; myMap[make_pair(a[i], b[i])] = w[i]; myMap[make_pair(b[i], a[i])] = w[i]; adj[a[i]].push_back(b[i]), adj[b[i]].push_back(a[i]); } return 0; hasVisited.assign(N, false); vector<int> paths; for (int i = 0; i < N; i++) { if (!hasVisited[i]) { int x = find_farthest_node(i, true); int y = find_farthest_node(x, false); //x and y are endpoints of the diameter vector<int> nodes; int val = y; while (val != -1) { nodes.push_back(val); val = parent[val]; } int sum = 0; for (int j = 1; j < (int) nodes.size(); j++) { sum += myMap[make_pair(nodes[j], nodes[j - 1])]; } int a = 0; int myMin = INT_MAX; for (int j = 1; j < (int)nodes.size(); j++) { a += myMap[make_pair(nodes[j], nodes[j - 1])]; myMin = min(myMin, max(a, sum - a)); } paths.push_back(myMin); } } sort(paths.begin(), paths.end()); if (paths.size() == 1) { return paths[0]; } else { return paths.back() + paths[paths.size() - 2]; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...