#include<bits/stdc++.h>
#include "grader.h"
#define ii pair<int, int>
#define fi first
#define se second
#define pb push_back
using namespace std;
const int maxN = 520;
bool removed[maxN];
int sz[maxN], in[maxN], out[maxN], cnt;
vector<int> adj[maxN];
void DFS(int u = 1, int p = 0){
in[u] = ++cnt;
sz[u] = 1;
for(int v : adj[u]){
if(removed[v] || v == p)
continue;
DFS(v, u);
sz[u] += sz[v];
}
out[u] = cnt;
}
int findEgg(int N, vector<ii> bridges){
for(auto [u, v] : bridges)
adj[u].pb(v), adj[v].pb(u);
for(int Q = 1; Q <= 9; ++Q){
cnt = 0;
int root = 0;
for(int i = 1; i <= N; ++i){
if(removed[i])
continue;
root = i;
break;
}
DFS(root);
int zz = sz[root] / 2;
int s = root;
for(int i = 1; i <= N; ++i){
if(removed[i])
continue;
if(abs(zz - sz[i]) < abs(zz - sz[s]))
s = i;
}
vector<int> vec;
for(int i = 1; i <= N; ++i){
if(removed[i])
continue;
if(in[s] <= in[i] && in[i] <= out[s])
vec.pb(i);
}
if(query(vec)){
for(int i = 1; i <= N; ++i){
if(removed[i])
continue;
if(in[s] <= in[i] && in[i] <= out[s])
continue;
removed[i] = true;
}
}
else{
for(int i : vec)
removed[i] = true;
}
int cntRem = 0;
for(int i = 1; i <= N; ++i)
cntRem += !removed[i];
if(cntRem == 1){
for(int i = 1; i <= N; ++i)
if(!removed[i])
return i;
}
}
return -1;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
1 ms |
604 KB |
Execution killed with signal 6 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
1 ms |
600 KB |
Execution killed with signal 6 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
1 ms |
600 KB |
Execution killed with signal 6 |
2 |
Halted |
0 ms |
0 KB |
- |