Submission #1283692

#TimeUsernameProblemLanguageResultExecution timeMemory
1283692Faisal_SaqibEaster Eggs (info1cup17_eastereggs)C++20
6 / 100
2 ms428 KiB
#include <bits/stdc++.h>
#include "grader.h"
// // #include "grader.cpp"

using namespace std;
const int TP=513;
// vector<int> ma[TP];
int n,sub[TP],deg[TP],par[TP];
// set<int> rem;
// int sz,fv=-1;
// vector<int> cur;
// void compute(int x,int p)
// {
//     // cout<<"AT "<<x<<' '<<p<<endl;
//     for(auto y:ma[x])
//     {
//         if(y==p)continue;
//         compute(y,x);
//     }
//     cur.push_back(x);
// }
// void dfs_(int x,int p=-1)
// {
//     sub[x]=1;
//     par[x]=p;
//     for(auto y:ma[x])
//     {
//         if(y==p)continue;
//         dfs_(y,x);
//         sub[x]+=sub[y];
//     }
//     // if(sub[x]==(sz/2))
//     // {
//     //     fv=x;
//     // }
// }
// int find_centriod(int x,int p=-1)
// {
//     for(auto y:ma[x])
//     {
//         if(y!=p and sub[y]>(sz/2))
//         {
//             sub[x]-=sub[y];
//             sub[y]+=sub[x];
//             return find_centriod(y,x);
//         }
//     }
//     return x;
// }
// int findEgg (int N, vector < pair < int, int > > edge)
// {
//     n=N;
//     for(int i=0;i<=n;i++)ma[i].clear();
//     for(int i=0;i<n-1;i++)
//     {
//         ma[edge[i].first].push_back(edge[i].second);
//         ma[edge[i].second].push_back(edge[i].first);
//     }
//     rem.clear();
//     for(int i=1;i<=n;i++)
//     {
//         rem.insert(i);
//     }
//     while(rem.size()>1) // 9 time 
//     {
//         sz=rem.size();
//         // cout<<"Cur "<<sz<<endl;
//         int x=*begin(rem);
//         dfs_(x);
//         // cout<<"X: "<<x<<" SZ done"<<endl;
//         for(auto y:rem)
//         {
//             bitset<520> pos;
//             pos[1]=1; // only y
//             for(auto oe:ma[y])
//             {
//                 if(oe==par[y])continue;
//                 pos|=(pos<<sub[oe]); // y along some other subtree
//             }
//             if(par[y]!=-1)
//             {
//                 pos|=(pos<<(sz-sub[y])); // y along with other subtree
//             }
//             // 2x we need to find connected x node
//             // 2x+1  x x+1
//             // cout<<"Compute bitset "<<y<<endl;
//             if(pos[(sz/2)])
//             {
//                 // cout<<"Copmuting dp"<<endl;
//                 vector<int> dp(530,-1);    
//                 dp[1]=y;
//                 for(auto oe:ma[y])
//                 {
//                     if(oe==par[y])continue;
//                     for(int q=519-sub[oe];q>=0;q--)
//                     {
//                         if(dp[q]!=-1)
//                         {
//                             dp[q+sub[oe]]=oe;
//                         }
//                     }
//                 }
//                  if(par[y]!=-1)
//                 {
//                     for(int q=519-(sz-sub[y]);q>=0;q--)
//                     {
//                         if(dp[q]!=-1)
//                         {
//                             dp[q+(sz-sub[y])]=par[y];
//                         }
//                     }
//                 }
//                 // cout<<"Dp done"<<endl;
//                 int zy=sz/2;
//                 set<int> want={y}; // we surely take y
//                 while(zy>0)
//                 {
//                     // cout<<"Vertex "<<dp[zy]<<" added to answer"<<endl;
//                     want.insert(dp[zy]);
//                     int yp=dp[zy];
//                     if(yp==y)
//                     {
//                         // cout<<"SELF "<<1<<endl;
//                         zy-=1;
//                     }
//                     else if(yp==par[y])
//                     {
//                         // cout<<"Sizep "<<sz-sub[y]<<endl;
//                         zy-=(sz-sub[y]);
//                     }
//                     else
//                     {
//                         // cout<<"Sizec "<<sub[yp]<<endl;
//                         zy-=sub[yp];
//                     }
//                 }
//                 cur.clear();
//                 cur.push_back(y);
//                 // cout<<"Subtree "<<endl;
//                 for(auto yp:ma[y])
//                 {
//                     if(want.find(yp)!=want.end())
//                     {
//                         compute(yp,y);
//                     }
//                 }
//                 // cout<<"Final done"<<endl;
//                 break;
//             }
//         }
//         // cout<<"Found cur: ";
//         // for(auto x:cur)cout<<x<<' ';
//         // cout<<endl;
//         if(query(cur))
//         {
//             rem.clear();
//             for(auto x:cur)rem.insert(x);
//         }
//         else
//         {
//             for(auto x:cur)rem.erase(x);
//         }
//     }
//     return *begin(rem);
// }
int findEgg (int N, vector < pair < int, int > > edge)
{
    n=N;
    for(int i=0;i<n-1;i++)
    {
        deg[edge[i].first]++;
        deg[edge[i].second]++;
    }
    for(int i=1;i<=n;i++)
    {
        if(query({i}))return i;
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...