题解:P11280 「GFOI Round 2」Jom & Terry
liuchang09 · · 题解
思路
设
如果 Terry 先移动到结点
u 后 Jom 在同一回合也移动到u 是合法的
所以
而
解法
通过一遍广度优先搜索来记录
总时间复杂度为
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+1e1;
bool vis[maxn];
queue<int > q;
int n,m,root;
int f[maxn];
int t;
vector<int > a[maxn];
bool done[maxn];
int main(){
memset(f,0x3f,sizeof f);
printf("I'm here!\n");
scanf("%d%d%d",&n,&m,&root);
for(int i=1;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
if(u==v) continue;
a[u].push_back(v);
a[v].push_back(u);//链接矩阵存双向边
}
q.push(root);
vis[root]=true;
f[root]=0;
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=0;i<a[x].size();i++){
int y=a[x][i];
if(!vis[y]) q.push(y),f[y]=f[x]+1,vis[y]=true;
}
}
scanf("%d",&t);
while(t--){
int x,y;
scanf("%d%d",&x,&y);
if(f[x]<=f[y])
printf("Terry\n");
else printf("Jom\n");
}
return 0;
}