Submission #1323235

#TimeUsernameProblemLanguageResultExecution timeMemory
1323235adiyerEaster Eggs (info1cup17_eastereggs)C++20
100 / 100
11 ms512 KiB
#include <bits/stdc++.h>
#include "grader.h"

using namespace std;

int findEgg (int n, vector < pair < int, int > > bridges){
    int x = n;
    int can[n + 1] = {}, in[n + 1] = {};

    vector < int > ver;
    vector < int > g[n + 1];

    fill(can, can + n + 1, 1);
    for(auto [x, y] : bridges) g[x].push_back(y), g[y].push_back(x);

    function < void(int, int) > dfs = [&](int v, int p){
        if(!x) return;
        ver.push_back(v);
        if(can[v]) in[v] = 1, x--;
        for(int u : g[v])
            if(u != p)
                dfs(u, v);
    };

    while(x > 1){
        int val = x; ver.clear();
        for(int i = 1; i <= n; i++) in[i] = 0;
        x >>= 1, dfs(1, -1);
        // cout << "ver ";
        // for(int v : ver) cout << v << ' ';
        // cout << "<--- " << query(ver) << '\n';
        if(query(ver)){
            for(int i = 1; i <= n; i++) can[i] &= in[i];
            x = val / 2;
        }
        else{
            for(int i = 1; i <= n; i++) can[i] &= (in[i] ^ 1);
            x = val - val / 2;
        }
        // cout << "case " << val << ' ' << x << '\n';
        // for(int i = 1; i <= n; i++) cout << can[i] << ' ';
        // cout << '\n';
    }
    for(int i = 1; i <= n; i++)
        if(can[i])
            return i;
    return -1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...