Submission #484266

#TimeUsernameProblemLanguageResultExecution timeMemory
484266Tenis0206Easter Eggs (info1cup17_eastereggs)C++11
100 / 100
14 ms2760 KiB
#include <bits/stdc++.h>
#include "grader.h"

using namespace std;

int cnt = 0;

int n;

vector<int> G[100005];

int p[100005],fr[100005];
int l[100005],s[100005];

/*int ou = 0;

bool query(vector<int> v)
{
    for(auto it : v)
    {
        if(it==ou)
        {
            return true;
        }
    }
    return false;
}
*/

void dfs(int nod, int dad = 0)
{
    p[++cnt] = nod;
    l[nod] = cnt;
    for(auto it : G[nod])
    {
        if(it==dad)
        {
            continue;
        }
        dfs(it,nod);
        p[++cnt] = nod;
    }
}

vector<int> get_query(int st, int dr)
{
    vector<int> rez;
    for(int i=st;i<=dr;i++)
    {
        if(!fr[p[i]])
        {
            rez.push_back(p[i]);
        }
        ++fr[p[i]];
    }
    for(int i=st;i<=dr;i++)
    {
        fr[p[i]] = 0;
    }
    return rez;
}

bool cmp(int a, int b)
{
    return l[a] < l[b];
}

int findEgg(int N, vector<pair<int,int>> e)
{
    n = N;
    for(auto it : e)
    {
        int x = it.first;
        int y = it.second;
        G[x].push_back(y);
        G[y].push_back(x);
    }
    dfs(1);
    for(int i=1;i<=n;i++)
    {
        s[i] = i;
    }
    sort(s+1,s+n+1,cmp);
    int st = 1;
    int dr = n;
    while(st<dr)
    {
        int mij = (st+dr)>>1;
        vector<int> q = get_query(l[s[st]],l[s[mij+1]]-1);
        if(query(q))
        {
            dr = mij;
        }
        else
        {
            st = mij+1;
        }
    }
    cnt = 0;
    for(int i=1;i<=n;i++)
    {
        G[i].clear();
    }
    return s[st];
}

/*int main()
{
    int n;
    cin>>n>>ou;
    vector<pair<int,int>> e;
    for(int i=1;i<n;i++)
    {
         int x,y;
         cin>>x>>y;
         e.push_back({x,y});
    }
    cout<<findEgg(n,e);
    return 0;
}
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...