Submission #1173337

#TimeUsernameProblemLanguageResultExecution timeMemory
1173337MinbaevNetwork (BOI15_net)C++20
18 / 100
228 ms16296 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #pragma GCC target("avx,avx2,fma") #pragma GCC optimize("Ofast,unroll-loops") using namespace std; using namespace __gnu_pbds; #define pb push_back #define all(x) x.begin(),x.end() #define int long long #define ar array template<class T>bool umax(T &a,T b){if(a<b){a=b;return true;}return false;} template<class T>bool umin(T &a,T b){if(b<a){a=b;return true;}return false;} template<class T> using ste = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>; namespace FAST { template<typename T, typename F> istream &operator>>(istream &cin, pair<T, F> &p) { cin >> p.first >> p.second; return cin; } template<typename T, typename F> ostream &operator<<(ostream &cout, pair<T, F> &p) { cout << p.first << ' ' << p.second; return cout; } template<typename T> istream &operator>>(istream &cin, vector<T> &a) { for (T &i: a) cin >> i; return cin; } template<typename T> ostream &operator<<(ostream &cout, vector<T> &a) { for (T i: a) cout << i << ' '; return cout; } template<typename T> istream &operator>>(istream &cin, deque<T> &a) { for (T &i: a) cin >> i; return cin; } template<typename T> ostream &operator<<(ostream &cout, deque<T> &a) { for (T i: a) cout << i << ' '; return cout; } } using namespace FAST; const int inf = 3e18 + 7; const int mod = 1e9 + 7; const int N = 5e5 + 5; const int md = 998244353; int binpow(int a, int b, int m){ if(b == 0)return 1; if(b % 2 == 0){ int c = binpow(a,b/2,m); return (c*c)%m; } return (binpow(a,b-1,m)*a)%m; } int divi(int a, int b, int m){ return (a*(binpow(b,m-2, m)))%m; } int n,m,k,q; vector<int> g[N], dep(N); vector<ar<int,2>>vs; void dfs(int x, int pr){ if(g[x].size() == 1){ vs.pb({dep[x], x}); return; } for(auto to:g[x]){ if(to == pr)continue; dep[to] = dep[x] + 1; dfs(to, x); } } void solve(){ cin >> n; for(int i = 2;i<=n;i++){ int a,b; cin >> a >> b; g[a].pb(b); g[b].pb(a); } vector<ar<int,2>>u; int sz = inf; for(int i = 1;i<=n;i++){ vector<ar<int,2>>ans; vector<int>op; for(auto to:g[i]){ dep[to] = 1; vs.clear(); dfs(to, i); sort(all(vs)); reverse(all(vs)); ans.pb({i, vs[0][1]}); for(int i = 2;i<vs.size();i+=2){ ans.pb({vs[i-1][1], vs[i][1]}); } if(vs.size() % 2 == 0){ op.pb(vs[vs.size()-1][1]); } } for(int i = 1;i<op.size();i++){ ans.pb({op[i-1], op[i]}); } if(op.size() % 2 == 1){ ans.pb({op[op.size()-1], i}); } if(umin(sz, (int)ans.size())){ u = ans; } } cout << u.size() << "\n"; for(auto [a, b] : u){ cout << a << " " << b << "\n"; } } /* */ signed main() { // freopen("seq.in", "r", stdin); // freopen("seq.out", "w", stdout); ios_base::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL); int tt=1;//cin>>tt; while(tt--)solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...