제출 #1321154

#제출 시각아이디문제언어결과실행 시간메모리
1321154kantaponzEaster Eggs (info1cup17_eastereggs)C++20
0 / 100
271 ms196608 KiB
#include <bits/stdc++.h>
#include "grader.h"

using namespace std;

const int maxN = 515;

int N;
vector<int> adj[maxN];
set<int> cur;
bool del[maxN];
queue<pair<int,int>> q; // u, pa

int findEgg (int n, vector<pair<int,int>> bridges)
{
    N = n;
    for (auto [u, v] : bridges) {
        adj[u].emplace_back(v);
        adj[v].emplace_back(u);
    }
    for (int i = 1; i <= N; i++) {
        cur.insert(i);
    }
    while (cur.size() != 1) {
        int left = cur.size();
        int need = left / 2;
        int ct = 0;
        vector<int> v;
        q.push({*cur.begin(), -1});
        while (!q.empty()) {
            auto [u, pa] = q.front();
            q.pop();
            if (ct >= need) continue;
            if (!del[u]) v.emplace_back(u), ct++;
            for (auto vv : adj[u]) {
                if (vv == pa) continue;
                q.emplace(vv, u);
            }
        }
        bool ok = query(v);
        if (ok) {
            set<int> have;
            for (auto x : v) {
                if (!del[x]) have.insert(x);
            }
            for (auto x : cur) {
                if (have.find(x) == have.end()) {
                    del[x] = 1;
                }
            }
            cur = have;
        } else {
            for (auto x : v) {
                del[x] = 1;
                if (cur.find(x) != cur.end()) cur.erase(x);
            }
        }
    }
    return *cur.begin();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...