Submission #1189048

#TimeUsernameProblemLanguageResultExecution timeMemory
1189048pxsitNetwork (BOI15_net)C++20
0 / 100
172 ms327680 KiB
#include <bits/stdc++.h>
using namespace std;
int n,m,k,q;
vector<vector<int>> adj;
vector<int> dep;
vector<pair<int,int>> v;
void dfs(int x, int i){
    if(adj[x].size() == 1){
        v.emplace_back(dep[x], x);
        return;
    }
    for(auto x:adj[x]){
        if(x == i) continue;
        dep[x] = dep[x] + 1;
        dfs(x, x);
    }
}
int main(){
    cin >> n;
    adj.resize(n+1);
    dep.resize(n+1, 0);
    for(int i = 2; i <= n; i++){
        int a,b;
        cin >> a >> b;
        adj[a].emplace_back(b);
        adj[b].emplace_back(a);
    }
    vector<pair<int,int>> p;
    int sz = INT_MAX;
    for(int i = 1; i <= n; i++){
        vector<pair<int,int>> ans;
        vector<int> cnt;
        for(auto x : adj[i]){
            dep[x] = 1;
            v.clear();
            dfs(x, i);
            sort(v.begin(), v.end(), greater<pair<int,int>>());
            ans.emplace_back(i, v[0].second);
            for(int j = 2; j < v.size(); j += 2)
                ans.emplace_back(v[j-1].second, v[j].second);
            if(v.size() % 2 == 0)
                cnt.emplace_back(v.back().second);
        }
        for(int k = 1; k < cnt.size(); k += 2)
            ans.emplace_back(cnt[k-1], cnt[k]);
        if(cnt.size() % 2 == 1)
            ans.emplace_back(cnt.back(), i);
        if(sz > ans.size()){
            p = ans;
            sz = ans.size();
        }
    }
    cout << p.size() << '\n';
    for(auto [a, b] : p){
        cout << a << ' ' << b << '\n';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...