Submission #1323087

#TimeUsernameProblemLanguageResultExecution timeMemory
1323087adiyerEaster Eggs (info1cup17_eastereggs)C++20
10 / 100
9 ms528 KiB
#include <bits/stdc++.h>
#include "grader.h"

using namespace std;
const int MAXN = (1 << 9) + 3;

int del[MAXN], sz[MAXN], dp[MAXN], p1, p2, diff;

vector < int > g[MAXN], part[MAXN];

void calc(int v, int p = -1){
    sz[v] = 1;
    for(int u : g[v])
        if(u != p && !del[u])
            calc(u, v), sz[v] += sz[u];
}

void upd(int v, int p, int s){
    for(int u : g[v]){
        if(!del[u] && u != p){
            upd(u, v, s);
            if(abs(sz[u] * 2 - s) < diff){
                diff = abs(sz[u] * 2 - s);
                p1 = v, p2 = u;
            }
        }
    }
}
void add(int v, int p, vector < int > &x){
    x.push_back(v);
    for(int u : g[v])
        if(u != p && !del[u])
            add(u, v, x);
}

int centroid(int v){
    calc(v);
    if(sz[v] == 1) return v;
    diff = sz[v], p1 = p2 = 0;
    upd(v, -1, sz[v]);
    vector < int > v1, v2;
    add(p1, p2, v1);
    add(p2, p1, v2);
    if(query(v1)){
        for(int x : v2) del[x] = 1;
        return centroid(v1.back());
    }
    else{
        for(int x : v1)  del[x] = 1;
        return centroid(v2.back()); 
    }
}

int findEgg (int n, vector < pair < int, int > > bridges){
    for(int i = 1; i <= n; i++) g[i].clear(), part[i].clear(), sz[i] = del[i] = 0, dp[i] = -1;
    for(auto [x, y] : bridges) g[x].push_back(y), g[y].push_back(x);
    return centroid(1);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...