제출 #605064

#제출 시각아이디문제언어결과실행 시간메모리
605064tamthegodNetwork (BOI15_net)C++14
0 / 100
14 ms23768 KiB
#include<bits/stdc++.h> #define int long long #define pb push_back #define fi first #define se second using namespace std; using ll = long long; using ld = long double; using ull = unsigned long long; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int maxN = 1e6 + 5; const int mod = 1e9 + 7; const ll oo = 1e18; int n; vector<int> adj[maxN]; int depth[maxN]; void ReadInput() { cin >> n; for(int i=1; i<n; i++) { int u, v; cin >> u >> v; adj[u].pb(v); adj[v].pb(u); } } void dfs(int u, int par) { for(int v : adj[u]) { if(v == par) continue; depth[v] = depth[u] + 1; dfs(v, u); } } void Solve() { dfs(1, 0); vector<int> leaf; for(int i=1; i<=n; i++) { if(adj[i].size() == 1) leaf.pb(i); } sort(leaf.begin(), leaf.end(), [](int i, int j) { return depth[i] < depth[j]; }); if(leaf.size() % 2 == 0) { cout << leaf.size() / 2 << '\n'; int l = 0, r = leaf.size() - 1; while(l < r) { cout << leaf[l] << " " << leaf[r] << '\n'; l++; r--; } return; } cout << leaf.size() / 2 + 1 << '\n'; int l = 0, r = leaf.size() - 1; while(l < r) { cout << leaf[l] << " " << leaf[r] << '\n'; l++; r--; } for(int i=1; i<=n; i++) { if(i != adj[leaf.back()][0]) { cout << leaf.back() << " " << i; return; } } } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); ReadInput(); Solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...