제출 #1321552

#제출 시각아이디문제언어결과실행 시간메모리
1321552Zone_zoneeEaster Eggs (info1cup17_eastereggs)C++20
0 / 100
1 ms452 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...