Submission #1187286

#TimeUsernameProblemLanguageResultExecution timeMemory
1187286JooNetwork (BOI15_net)C++20
0 / 100
0 ms328 KiB
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    vector<vector<int>> graph(n + 1);
    for (int i = 0; i < n - 1; ++i) {
        int u, v;
        cin >> u >> v;
        graph[u].push_back(v);
        graph[v].push_back(u);
    }

    // Find leaves (nodes with degree 1)
    vector<int> leaves;
    for (int i = 1; i <= n; ++i) {
        if (graph[i].size() == 1) {
            leaves.push_back(i);
        }
    }

    vector<pair<int, int>> result;

    // Pair up leaves
    for (size_t i = 0; i + 1 < leaves.size(); i += 2) {
        result.emplace_back(leaves[i], leaves[i + 1]);
    }

    // If odd number of leaves, connect the last one to the root (or any node with degree > 1)
    if (leaves.size() % 2 == 1) {
        for (int i = 1; i <= n; ++i) {
            if (graph[i].size() > 1) {
                result.emplace_back(leaves.back(), i);
                break;
            }
        }
    }

    // Output
    cout << result.size() << endl;
    for (auto [u, v] : result) {
        cout << u << " " << v << endl;
    }

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...