Submission #1242845

#TimeUsernameProblemLanguageResultExecution timeMemory
1242845rhm_ganEaster Eggs (info1cup17_eastereggs)C++20
10 / 100
1 ms504 KiB
#include <bits/stdc++.h>
#include "grader.h"
using namespace std;

int n;
vector<int> sz;
vector<vector<int>> g;

void dfs_sz(int u, int p) {
    sz[u] = 1;
    for (auto v : g[u]) {
        if (v != p) {
            dfs_sz(v, u);
            sz[u] += sz[v];
        }
    }
}

int centroid(int u, int p) {
    for (auto v : g[u]) {
        if (v != p && sz[v] * 2 > n) {
            return centroid(v, u);
        }
    }
    return u;
}

vector<int> sub;
void subtree(int u, int p) {
    sub.push_back(u);
    for (auto v : g[u]) {
        if (v != p) {
            subtree(v, u);
        }
    }
}

int dfs(int u, int p) {
    for (auto v : g[u]) {
        if (v == p) continue;
        subtree(v, u);
        int res = query(sub);
        sub.clear();
        if (res) {
            return dfs(v, u);
        }
    }
    return u;
}

int findEgg (int N, vector<pair<int, int>> bridges) {
    n = N;
    g.assign(n + 1, vector<int>());
    sz.assign(n + 1, 0);
    for (auto [u, v] : bridges) {
        g[u].push_back(v);
        g[v].push_back(u);
    }

    dfs_sz(1, 0);
    int c = centroid(1, 0);

    return dfs(centroid(1, 0), 0);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...