# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
484248 | Tenis0206 | Easter Eggs (info1cup17_eastereggs) | C++11 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
int cnt = 0;
int n;
vector<int> G[1005];
int p[1005],fr[1005];
/*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;
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;
}
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);
int st = 1;
int dr = 2 * n - 1;
while(st<dr)
{
int mij = (st+dr)>>1;
vector<int> q = get_query(st,mij);
if(query(q))
{
dr = mij;
}
else
{
st = mij+1;
}
}
return p[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;
}
*/