제출 #1324432

#제출 시각아이디문제언어결과실행 시간메모리
1324432sh_qaxxorov_571Network (BOI15_net)C++20
100 / 100
367 ms49548 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

/**
 * BOI 2015 - Network
 * Murakkablik: O(N)
 */

const int MAXN = 500005;
vector<int> adj[MAXN];
vector<int> leaves;

// DFS orqali barcha barglarni tartib bilan yig'ish
void find_leaves(int u, int p) {
    if (adj[u].size() == 1) {
        leaves.push_back(u);
    }
    for (int v : adj[u]) {
        if (v != p) find_leaves(v, u);
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);

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

    // Agar n=2 bo'lsa (shartda n>=3 deyilgan)
    if (n == 2) {
        cout << "1\n1 2\n";
        return 0;
    }

    // Barg bo'lmagan ixtiyoriy tugunni ildiz sifatida tanlaymiz
    int root = 1;
    while (adj[root].size() == 1) root++;

    find_leaves(root, -1);

    int m = leaves.size();
    int k = (m + 1) / 2;
    
    cout << k << "\n";
    for (int i = 0; i < k; i++) {
        // Barglarni o'rtasidan bo'lib juftlash
        int u = leaves[i];
        int v = leaves[i + m / 2];
        cout << u << " " << v << "\n";
    }

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