# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1272905 | SP_Caramen | Network (BOI15_net) | C++20 | 0 ms | 0 KiB |
#pragma GCC optimize("02")
#pragma GCC target("avx,avx2,fma")
#include <bits/stdc++.h>
#define int long long
#define FOR(i, a, b) for (int i = (a); i <= (b); i++)
#define FOD(i, a, b) for (int i = (a); i >= (b); i--)
#define REP(i, n) for (int i = 0; i < (n); i++)
#define ALL(x) (x).begin(), (x).end()
#define _SP_Caramen__ signed main()
#define TIME (1.0 * clock() / CLOCKS_PER_SEC)
#define file(name) freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout)
#define MASK(i) (1LL << (i))
#define BIT(n , i) (((n) >> (i)) & 1)
#define SET_ON(n , i) ((n) | MASK(i))
#define SET_OFF(n , i) ((n) & ~MASK(i))
using namespace std;
const int MAXN = 5e5 + 5;
const int inf = 1e18;
int n;
vector<int> adj[MAXN];
vector<int> leaves;
_SP_Caramen__ {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> n;
for (int i = 1 ; i < n ; i++ ) {
int u , v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
for (int i = 1 ; i <= n ; i++ ) if(adj[i].size() == 1) leaves.push_back(i);
// for (int i : leaves) cout << i << ' ';
cout << (leaves.size() + 1) / 2 << '\n';
for (int i = 0 ; i + 1 < leaves.size() ; i += 2 ) {
cout << leaves[i] << ' ' << leaves[i + 1] << '\n';
}
if(leaves.size() % 2 != 0) cout << leaves[0] << ' ' << leaves.back();
cerr << "Time elapsed: " << TIME << "s.\n";
return (0 ^ 0);
}