#include <bits/stdc++.h>
#include "grader.h"
using namespace std;
int findEgg (int N, vector < pair < int, int > > bridges)
{
vector<vector<int>> al(N+1);
//~ assert((int)bridges.size()==N-1);
for(int i=0;i<N-1;i++){
al[bridges[i].first].push_back(bridges[i].second);
al[bridges[i].second].push_back(bridges[i].first);
}
vector<bool> ex(N+1, 1);
vector<int> sz(N+1, 1);
while(true){
//~ cout<<endl;
int sm=0, root=0;
for(int i=1;i<=N;i++){
if(ex[i]){
//~ printf("%d is in\n", i);
sm++;
root=i;
}
}
if(sm==1)return root;
vector<int> in;
auto dfs=[&](auto dfs, int x, int p)->void{
sz[x]=1;
for(auto it:al[x]){
if(it==p or !ex[it])continue;
dfs(dfs, it, x);
sz[x]+=sz[it];
}
};
dfs(dfs, root, 0);
auto dfs2=[&](auto dfs2, int x, int p)->void{
for(auto it:al[x]){
if(it==p or !ex[it])continue;
if(sz[it]>=sm/2){
//~ printf("sz[%d] is %d, sm is %d\n", it, sz[it], sm);
dfs2(dfs2, it, x);
return;
}
}
//~ printf("%d, dz %d sm is %d\n", x, sz[x],sm);
in.push_back(x);
for(auto it:al[x]){
if(it==p or !ex[it])continue;
dfs2(dfs2, it, x);
}
};
dfs2(dfs2, root, 0);
//~ for(int i=1;i<=N;i++){
//~ cout<<sz[i]<<" ";
//~ }
//~ cout<<endl;
//~ for(auto it: in)cout<<it<<" ";
//~ cout<<endl;
if(query(in)){
ex.assign(N+1, 0);
for(auto it:in)ex[it]=1;
}
else{
for(auto it:in)ex[it]=0;
}
}
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |