1 条题解
-
0
#include<bits/stdc++.h> using namespace std; const int N=1e5+5; int n,m,x,y,d[N]; bool vis[N],ins[N]; vector<int>g[N]; queue<int>q; void dfs(int x){ vis[x]=ins[x]=1; for(int y:g[x]) if(!ins[y]){ d[y]++; if(!vis[y]) dfs(y); } ins[x]=0; } int query(int x,int y){ printf("? %d %d\n",x,y),fflush(stdout); return scanf("%d",&x),x; } signed main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) scanf("%d%d",&x,&y),g[x].push_back(y); for(int i=1;i<=n;i++) if(!vis[i]) dfs(i); for(int i=1;i<=n;i++) if(!d[i]) q.push(i); while(q.size()>1){ x=q.front(),q.pop(),y=q.front(),q.pop(); if(!query(x,y)) swap(x,y); for(int i:g[y]) if(!--d[i]) q.push(i); q.push(x); } printf("! %d",q.front()); return 0; }
- 1
信息
- ID
- 6861
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者