#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=5e5+10;
vector<int> ma[N];
// vector<int> cur;
vector<pair<int,int>> ans,cur;
void dfs(int x,int p=-1,int h=1)
{
bool leaf=1;
for(auto y:ma[x])
{
if(y==p)continue;
leaf=0;
dfs(y,x,h+1);
}
if(leaf)
{
cur.push_back({h,x});
// if(cur.size())
// {
// ans.push_back({cur.back(),x});
// cur.pop_back();
// }
// else
// {
// cur.push_back(x);
// }
}
}
int main()
{
ios::sync_with_stdio(0);
cout.tie(0);
cin.tie(0);
int n;
cin>>n;
for(int i=1;i<n;i++)
{
int x,y;
cin>>x>>y;
ma[x].push_back(y);
ma[y].push_back(x);
}
for(int i=1;i<=n;i++)
{
if(ma[i].size()==1)
{
cur.push_back({1,i});
dfs(i);
// if(cur.size()%2==1)
// {
// cur.push_back({1,i});
// }
sort(begin(cur),end(cur));
int sz=cur.size();
int k=sz/2;
// 0 1 2 3 sz=4
// 2
// 0 2
// 1 3
// 0 1 2
// sz=3
//
for(int j=0;j<sz;j++)
{
if(j+k>=sz)
{
ans.push_back({cur[j].second,i});
break;
}
// if(j==sz-1-j)
// {
// break;
// }
ans.push_back({cur[j].second,cur[j+k].second});
}
// i,n-i-1
break;
}
}
cout<<ans.size()<<endl;
for(auto i:ans)
{
cout<<i.first<<' '<<i.second<<endl;
}
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |