Submission #1250847

#TimeUsernameProblemLanguageResultExecution timeMemory
1250847tradzNetwork (BOI15_net)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
#define TIME  (1.0 * clock() / CLOCKS_PER_SEC)
#define For(i,a,b) for(int i = a; i <= b; i++)
#define Ford(i,a,b) for(int i = a; i >= b; i--)
#define ll long long
#define ii pair<int,int>
#define fi first
#define se second
#define all(v) v.begin(),v.end()
#define RRH(v) v.resize(unique(all(v)) - v.begin())

using namespace std;
const int  N = 1e6+7;
const int M = 1e9+7;
const ll oo = 3e18;

mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());

long long GetRandom(long long l, long long r) {
    return uniform_int_distribution<long long> (l, r)(rng);
}

int n, cnt = 0;
vector <int> g[N], ver[N];
int dp[N];
void dfs(int u, int rem, int pre = 0, int num) {
    dp[u] = 1;
    for (int v: g[u]) {
        if (v == pre) continue;
        if (rem == 1) {
            cnt++;
            dfs(v, 0, u, cnt);
        }
        else {
            dfs(v, 0, u, num);
        }
        dp[u] += dp[v];
    }
    if (dp[u] == 1) ver[num].push_back(u);
}

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

    #define TASK ""
    if (fopen (".inp", "r")) {
        freopen (".inp", "r", stdin);
        freopen (".out", "w", stdout);
    }
    if(fopen(TASK".inp", "r")) {
        freopen(TASK".inp", "r", stdin);
        freopen(TASK".out", "w", stdout);
    }

    cin >> n;

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



    vector <pair <int, int>> ans;

    for (int i = 1; i <= n; i++) {
        if (g[i].size() >= 2) {
            dfs(i, 1);
            break;
        }
    }

    int i = 1;
    int j = cnt;
    while (i < j) {
        while (ver[i].size() && ver[j].size()) {
            ans.push_back({ver[i].back(), ver[j].back()});
            ver[i].pop_back();
            ver[j].pop_back();
        }
        if (ver[i].size() == 0) i++;
        else j--;
    }

    if (i == j) {
        if (ver[i].size() != 0) {
            int l = 0;
            int r = ver[i].size() - 1;
            while (l < r) {
                ans.push_back({ver[i][l], ver[i][r]});
                l++;
                r--;
            }
            if (l == r) {
                ans.push_back({ans[0].fi, ver[i][l]});
            }
        }
    }

    cout << ans.size() << '\n';
    for (int i = 0; i < ans.size(); i++) cout << ans[i].first << " " << ans[i].second << '\n';

    cerr << "Time elapsed: " << TIME << " s.\n";
    return 0;
}

Compilation message (stderr)

net.cpp:26:43: error: default argument missing for parameter 4 of 'void dfs(int, int, int, int)'
   26 | void dfs(int u, int rem, int pre = 0, int num) {
      |                                       ~~~~^~~
net.cpp:26:30: note: ...following parameter 3 which has a default argument
   26 | void dfs(int u, int rem, int pre = 0, int num) {
      |                          ~~~~^~~~~~~
net.cpp: In function 'int main()':
net.cpp:47:17: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   47 |         freopen (".inp", "r", stdin);
      |         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~
net.cpp:48:17: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   48 |         freopen (".out", "w", stdout);
      |         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
net.cpp:51:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   51 |         freopen(TASK".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
net.cpp:52:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   52 |         freopen(TASK".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~