QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#748099 | #9570. Binary Tree | acansaidong | TL | 0ms | 0kb | C++20 | 1.3kb | 2024-11-14 19:19:46 | 2024-11-14 19:19:47 |
answer
#include<bits/stdc++.h>
#define int long long
#define double long double
using namespace std;
const int N=2e5+10;
const int M=0x3f3f3f3f3f3f3f3f;
vector<int>e[N];
int a[N],b[N],vis[N];
signed main()
{
// ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int T;cin>>T;
while(T--)
{
int n;cin>>n;int ans=1;
for(int i=1;i<=n;i++) vis[i]=0,e[i].clear();
for(int i=1;i<=n;i++)
{
int x,y;cin>>x>>y;
a[i]=x;b[i]=y;
vis[x]++;vis[y]++;
if(y) e[i].push_back(y);
if(x) e[i].push_back(x);
}
int yu=1,u,v,t,la=0;
for(int i=1;i<=n;i++) if(vis[i]==0) {yu=i;break;}
u=yu;v=e[u][0];
int yui=floor(log2(n));
while(1)
{
cout<<"? "<<u<<" "<<v<<endl;
cin>>t;
if(t==0)
{
if(e[u].size()==1) {ans=u;break;}
else if(u==la) {ans=u;break;}
else
{
la=u;v=e[u][1];
}
}
else if(t==2)
{
la=v;u=v;
if(a[v]==0&&b[v]==0)
{
ans=v;break;
}
else
{
v=e[u][0];
}
}
}
cout<<"! "<<ans<<"\n";
}
return 0;
}
詳細信息
Test #1:
score: 0
Time Limit Exceeded
input:
2 5 0 0 1 5 2 4 0 0 0 0 0 2
output:
? 3 4 ? 3 2 ? 2 5