Submission #1189048

#TimeUsernameProblemLanguageResultExecution timeMemory
1189048pxsitNetwork (BOI15_net)C++20
0 / 100
172 ms327680 KiB
#include <bits/stdc++.h> using namespace std; int n,m,k,q; vector<vector<int>> adj; vector<int> dep; vector<pair<int,int>> v; void dfs(int x, int i){ if(adj[x].size() == 1){ v.emplace_back(dep[x], x); return; } for(auto x:adj[x]){ if(x == i) continue; dep[x] = dep[x] + 1; dfs(x, x); } } int main(){ cin >> n; adj.resize(n+1); dep.resize(n+1, 0); for(int i = 2; i <= n; i++){ int a,b; cin >> a >> b; adj[a].emplace_back(b); adj[b].emplace_back(a); } vector<pair<int,int>> p; int sz = INT_MAX; for(int i = 1; i <= n; i++){ vector<pair<int,int>> ans; vector<int> cnt; for(auto x : adj[i]){ dep[x] = 1; v.clear(); dfs(x, i); sort(v.begin(), v.end(), greater<pair<int,int>>()); ans.emplace_back(i, v[0].second); for(int j = 2; j < v.size(); j += 2) ans.emplace_back(v[j-1].second, v[j].second); if(v.size() % 2 == 0) cnt.emplace_back(v.back().second); } for(int k = 1; k < cnt.size(); k += 2) ans.emplace_back(cnt[k-1], cnt[k]); if(cnt.size() % 2 == 1) ans.emplace_back(cnt.back(), i); if(sz > ans.size()){ p = ans; sz = ans.size(); } } cout << p.size() << '\n'; for(auto [a, b] : p){ cout << a << ' ' << b << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...