Submission #632577

#TimeUsernameProblemLanguageResultExecution timeMemory
632577stevancvNetwork (BOI15_net)C++14
100 / 100
579 ms77144 KiB
#include <bits/stdc++.h> #define ll long long #define ld long double #define sp ' ' #define en '\n' #define smin(a, b) a = min(a, b) #define smax(a, b) a = max(a, b) using namespace std; const int N = 5e5 + 2; const int mod = 1e9 + 7; vector<int> g[N]; int szl[N]; vector<vector<int>> all; void Dfs(int s, int e) { for (int u : g[s]) { if (u != e) { Dfs(u, s); szl[s] += szl[u]; } } smax(szl[s], 1); } int Dfs1(int s, int e, int t) { for (int u : g[s]) { if (u == e) continue; if (2 * szl[u] > t) return Dfs1(u, s, t); } return s; } void Dfs2(int s, int e, int r) { if (g[s].size() == 1) all.back().push_back(s); for (int u : g[s]) { if (u == e) continue; if (s == r) all.push_back({}); Dfs2(u, s, r); } } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin >> n; for (int i = 0; i < n - 1; i++) { int u, v; cin >> u >> v; g[u].push_back(v); g[v].push_back(u); } int root = 1; for (int i = 1; i <= n; i++) if (g[i].size() > g[root].size()) root = i; Dfs(root, 0); root = Dfs1(root, 0, szl[root]); Dfs2(root, 0, root); int sz = all.size(); priority_queue<pair<int, int>> pq; vector<array<int, 2>> ans; for (int i = 0; i < sz; i++) pq.push({all[i].size(), i}); int who = -1; while (pq.size() > 1) { int x = pq.top().second; pq.pop(); int y = pq.top().second; pq.pop(); who = all[x].back(); ans.push_back({all[x].back(), all[y].back()}); all[x].pop_back(); all[y].pop_back(); if (all[x].size() > 0) pq.push({all[x].size(), x}); if (all[y].size() > 0) pq.push({all[y].size(), y}); } if (pq.size() == 1) ans.push_back({who, all[pq.top().second].back()}); cout << ans.size() << en; for (int i = 0; i < ans.size(); i++) { cout << ans[i][0] << sp << ans[i][1] << en; } return 0; }

Compilation message (stderr)

net.cpp: In function 'int main()':
net.cpp:70:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::array<int, 2> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   70 |     for (int i = 0; i < ans.size(); i++) {
      |                     ~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...