#include <bits/stdc++.h>
using namespace std;
long long i, j, l, r, mid, p, q, k, t, n, m, a, b, c, d, ans, cnt, res, arr[500005], arr2[500005], arr3[500005];
const long long mod = 999993143, mod2 = 999993469;
string s;
bool check;
vector <long long> arr4[500005];
vector <pair <long long, long long> > leaves, aa;
void dfs (long long v){
if (arr2[v] != -1){
return;
}
p += 1;
arr2[v] = 1;
arr3[v] = p;
// cout << v << " " << p << " a\n";
if (arr4[v].size() == 1 && v != 1){
return;
}
long long i;
for (i = 0; i < arr4[v].size(); i += 1){
if (arr2[arr4[v][i]] == -1){
// cout << arr4[v][i] << " ";
dfs(arr4[v][i]);
}
}
// cout << "\n";
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n;
for (i = 1; i < n; i += 1){
cin >> a >> b;
arr4[a].push_back(b);
arr4[b].push_back(a);
}
for (i = 1; i <= n; i += 1){
arr2[i] = -1;
}
p = 0;
dfs(1);
for (i = 1; i <= n; i += 1){
if (arr4[i].size() == 1){
leaves.push_back(make_pair(arr3[i], i));
// cout << arr3[i] << " " << i << "\n";
}
}
d = (leaves.size() + 1) / 2;
sort(leaves.begin(), leaves.end());
for (i = 0; i < d; i += 1){
if (leaves[i].second != leaves[(i + d) % leaves.size()].second){
aa.push_back(make_pair(leaves[i % leaves.size()].second, leaves[(i + d) % leaves.size()].second));
}
}
cout << aa.size() << "\n";
for (i = 0; i < aa.size(); i += 1){
cout << aa[i].first << " " << aa[i].second << "\n";
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |