Submission #1141523

#TimeUsernameProblemLanguageResultExecution timeMemory
1141523ArtieAaronEaster Eggs (info1cup17_eastereggs)C++20
10 / 100
7 ms536 KiB
#include <bits/stdc++.h>
#include "grader.h"
using namespace std;
typedef long long lli;
typedef vector<lli> vi;
typedef pair<lli, lli> ii;
typedef vector<ii> vii;
#define f first
#define s second
#define pb push_back
#define sz(v) (v).size()
#define all(v) (v).begin(), (v).end()
#define SL '\n'
#define fore(a,b,c) for(lli a = (b), fgh = (c); a < fgh; a ++)
#define _ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

void dfs(int pos, int par, vector<set<int>> &adj, vector<int> &tam){
    tam[pos] = 1;
    for(auto &i: adj[pos]){
        if(i == par) continue;
        dfs(i, pos, adj, tam);
        tam[pos] += tam[i];
    }
}

void subar(int pos, int par, vector<set<int>> &adj, vector<int> &q){
    q.pb(pos+1);
    for(auto &i: adj[pos]){
        if(i == par) continue;
        subar(i, pos, adj, q);
    }
}

int findEgg(int N, vector<pair<int, int>> bridges){
    int root = 0;
    vector<set<int>> adj(N);
    for(auto &i: bridges){
        i.f --, i.s --;
        adj[i.f].insert(i.s);
        adj[i.s].insert(i.f);
    }
    vector<int> tam(N);
    dfs(root, root, adj, tam);
    while(tam[root] != 1){
        int cent = root, par = root, sub, mx;
        while(true){
            sub = -1, mx = 0;
            for(auto &i: adj[cent]){
                if(i == par) continue;
                if(tam[i] > mx){
                    mx = tam[i], sub = i;
                }
            }
            if(sub == -1 or mx <= tam[root]/2) break;
            par = cent, cent = sub;
        }
        vector<int> q;
        subar(sub, cent, adj, q);
        if(query(q)){
            auto o = adj[sub].lower_bound(cent);
            adj[sub].erase(o);
            root = sub;
        } else {
            auto o = adj[cent].lower_bound(sub);
            adj[cent].erase(o);
        }
        dfs(root, root, adj, tam);
    }
    return root+1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...