Submission #1162197

#TimeUsernameProblemLanguageResultExecution timeMemory
1162197LilPlutonNetwork (BOI15_net)C++20
100 / 100
226 ms65788 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define ar array #define all(x) x.begin(), x.end() #define sortall(x) sort(all(x)) #define rep(i,a,b) for(int i = a; i < b; i++) #define per(i,a,b) for(int i = a; i >= b; i--) #define trav(a,x) for(auto& a : x) #define sz(x) (int)(x).size() #define ff first #define ss second #define pb push_back #define mp make_pair #define endl '\n' #define debug(x) cerr << #x << " = " << x << endl const int N = 1e6 + 5; struct BIT{ int n; vector<int>ft; void init(int _n){ n = _n; ft.resize(n + 1); } void update(int x, int val){ for(; x <= n; x += x & -x){ ft[x] += val; } } int query(int x){ int res = 0; for(; x > 0; x -= x & -x){ res += ft[x]; } return res; } int get(int l,int r){ return query(r) - query(l - 1); } }; struct DSU{ int n; vector<int> par, siz; void init(int _n){ n = _n + 5; par.resize(n); siz.resize(n); iota(all(par), 0); fill(all(siz), 1); } int find(int x){ return x == par[x] ? x : par[x] = find(par[x]); } void unite(int x, int y){ x = find(x); y = find(y); if(x != y){ if(siz[x] < siz[y]) swap(x, y); par[y] = x; siz[x] += siz[y]; } } }; vector<int>adj[N]; vector<int>indeg(N); vector<int>v; void dfs(int u, int p){ if(indeg[u] == 1){ v.push_back(u); return; } for(auto v : adj[u]){ if(v != p){ dfs(v, u); } } } void solve(){ int n; cin >> n; rep(i, 0, n - 1){ int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); indeg[u]++; indeg[v]++; } rep(i, 1, n + 1){ if(indeg[i] > 1){ dfs(i, -1); break; } } int ans = sz(v); cout << (ans + 1) / 2 << endl; rep(i, 0, (ans + 1) / 2){ cout << v[i] << " " << v[i + (ans) / 2] << endl; } } signed main() { ios::sync_with_stdio(0); cin.tie(0); int T = 1; while(T--){ solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...