Submission #1173415

#TimeUsernameProblemLanguageResultExecution timeMemory
1173415MinbaevNetwork (BOI15_net)C++20
100 / 100
383 ms97428 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>>ans; vector<int> dfs(int x, int pr){ if(g[x].size() == 1){ return {x}; } vector<int>v; for(auto to:g[x]){ if(to == pr)continue; vector<int>vs = dfs(to, x); // cout << to << " " << vs << "\n"; if(v.empty()){ v = vs; continue; } if(v.size() < vs.size())swap(v, vs); while(v.size() > 1 && !vs.empty()){ ans.pb({v.back(), vs.back()}); v.pop_back(); vs.pop_back(); } for(auto to:vs)v.pb(to); } return v; } 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); } int a = 1; while(g[a].size() == 1)a += 1; // cout << a << "\n"; vector<int> u = dfs(a, -1); for(int i = 1;i<u.size();i+=2){ ans.pb({u[i-1], u[i]}); } if(u.size() % 2 == 1){ ans.pb({a, u[u.size()-1]}); } cout << ans.size() << "\n"; for(auto [q,w] : ans)cout << q << " " << w << "\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...