#include <bits/stdc++.h>
#define int long long
using namespace std;
int a;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
vector<int> z[1000005];
vector <int> v;
int sta[1000005];
int fin[1000005];
int tour;
bool cmp(int a,int b){
return sta[a]<sta[b];
}
bool check[100005];
int par[1000005];
void dfs(int i,int parent){
par[i]=parent;
sta[i]=tour;
tour++;
for (auto p:z[i]){
if (p==parent){
continue;
}
dfs(p,i);
}
fin[i]=tour;
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> a;
for (int i=1;i<a;i++){
int x,y;
cin >> x >> y;
z[y].push_back(x);
z[x].push_back(y);
}
for (int i=1;i<=a;i++){
if (z[i].size()==1){
// cout << "ok" << "\n";
check[i]=true;
v.push_back(i);
}
}
dfs(1,0);
int k=v.size();
cout << (k+1)/2 << "\n";
if (k%2==1){
int x=v[k-1];
for (int i=1;i<=a;i++){
if (!check[i] && par[x]!=i){
cout << x << ' ' << i << "\n";
v.pop_back();
}
}
}
sort(v.begin(),v.end(),cmp);
int l=0;
int r=v.size()-1;
while (l<=r){
cout << v[l] << " " << v[r] << "\n";
l++;
r--;
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |