#include <bits/stdc++.h>
#include "grader.h"
using namespace std;
int findEgg (int N, vector<pair<int, int>> bridges)
{
vector<int> adj[600];
for(auto [u, v] : bridges){
adj[u].push_back(v);
adj[v].push_back(u);
}
vector<int> Q;
bitset<600> can;
can.set();
int sz = N;
auto bfs = [&](int x){
bitset<600> vis;
queue<int> q;
q.push(x);
vis[x] = 1;
while(!q.empty()){
int u = q.front(); q.pop();
Q.push_back(u);
if(Q.size() == sz) break;
for(int v : adj[u]){
if(vis[v] || !can[v]) continue;
vis[v] = 1;
q.push(v);
}
}
};
while(sz >= 1){
for(int i = 1; i <= N; ++i){
if(can[i]){
bfs(i);
break;
}
}
// cerr << "DBG : ";
// cerr << sz << '\n';
// for(auto i : Q) cerr << i << ' ';
// cerr << '\n';
if(Q.empty()) break;
if(query(Q)){
can.reset();
for(int x : Q) can[x] = 1;
// cerr << "TRUE\n";
}else{
for(int x : Q) can[x] = 0;
// cerr << "FALSE\n";
}
Q.clear();
sz = (sz+1)/2;
}
// cerr << "Ans list : ";
// for(int i = 1; i <= N; ++i){
// if(can[i] == 1) cerr << i << ' ';
// }
// cerr << '\n';
for(int i = 1; i <= N; ++i){
if(can[i] && query({i})) return i;
}
return -1;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |