Submission #1190589

#TimeUsernameProblemLanguageResultExecution timeMemory
1190589Panda50OEaster Eggs (info1cup17_eastereggs)C++20
0 / 100
1083 ms484 KiB
#include <bits/stdc++.h>
#include "grader.h"
using namespace std;

const int mxN = 525;
vector<int> adj[mxN];
int in[mxN], out[mxN];
int cnt = 0;

void dfs(int u, int p) {
    in[u] = ++cnt;
    for(auto v : adj[u]) {
        if(v == p) continue;
        dfs(v, u);
    }
    out[u] = ++cnt;
    return;
}

bool check(int N, int L, int M) {
    vector<int> ask;
    for(int i = 1; i <= N; ++i) {
        if(in[i] >= L && in[i] <= M) {
            ask.emplace_back(i);
        }
    }
    return query(ask);
}

int findEgg (int N, vector < pair < int, int > > bridges)
{
    // if (query ({1})) return 1;
    for(int i = 0; i < N; ++i) {
        auto [a,b] = bridges[i];
        adj[a].emplace_back(b);
        adj[b].emplace_back(a);
    }
    // euler tour
    dfs(1, -1);

    int l = 1, r = cnt;
    while(l < r) {
        int mid = (l+r+1) / 2;
        if(check(N, l, mid)) { // check every node that in after l and before mid
            l = mid;
        } else {
            r = mid-1;
        }
    }

    int ans;
    for(int i = 1; i <= N; ++i) {
        if(in[i] == l) {
            ans = i;
        }
    }

    return l;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...