博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cdoj 树上战争(Battle on the tree) Label:并查集?
阅读量:6196 次
发布时间:2019-06-21

本文共 1214 字,大约阅读时间需要 4 分钟。

 

给一棵树,如果树上的某个节点被某个人占据,则它的所有儿子都被占据,lxh和pfz初始时分别站在两个节点上,谁当前所在的点被另一个人占据,他就输了比赛,问谁能获胜。

Input

输入包含多组数据

每组第一行包含两个数NN,MM(NN,M≤100000M≤100000),NN表示树的节点数,MM表示询问数,N=M=0N=M=0表示输入结束。节点的编号为11到NN。

接下来N−1N−1行,每行22个整数AA,BB(1≤A1≤A,B≤NB≤N),表示编号为AA的节点是编号为BB的节点的父亲。

接下来MM行,每行有22个数,表示lxh和pfz的初始位置的编号XX,YY(1≤X1≤X,Y≤NY≤N,X≠YX≠Y),lxh总是先移动。

Output

对于每次询问,输出一行,输出获胜者的名字。

Sample input and output

Sample Input

Sample Output

2 1

1 2

1 2

5 2

1 2

1 3

3 4

3 5

4 2

4 5

0 0

lxh

pfz

lxh

Source

电子科技大学第六届ACM程序设计大赛 初赛

 

代码

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 int dis[100005],fa[100005];//dis到根节点距离 8 int n,m; 9 10 int Find(int x){11 if(dis[x]>0) return dis[x];12 13 if(x==fa[x]) return 0;14 else return dis[x]=Find(fa[x])+1;15 }16 void init_(){17 memset(dis,0,sizeof(dis));18 for(int i=1;i<=n;i++) fa[i]=i;19 }20 int main(){21 // freopen("01.in","r",stdin);22 while(scanf("%d%d",&n,&m)==2&&n>0&&m>0){23 init_();24 for(int i=1;i

谁离根近谁胜利

 

之前写了个dfs最短路不知道为什么错了,待定!!!

结论大概是初始化有问题,待改!!!

 

转载于:https://www.cnblogs.com/radiumlrb/p/5905708.html

你可能感兴趣的文章
bootstrap tab切换如何让鼠标移动自动切换内容
查看>>
Linq表达式、Lambda表达式你更喜欢哪个?
查看>>
Java学习——变量类型
查看>>
作为一名职高生学习Linux的心酸经历
查看>>
json数组的序列化和反序列化json数组的序列化和反序列化
查看>>
openjudge6047分蛋糕[DP]
查看>>
C#通过WebClient/HttpWebRequest实现http的post/get方法
查看>>
android:clipToPadding和android:clipChildren
查看>>
iOS学习笔记(4) — UITableView的 重用机制
查看>>
进制转换
查看>>
支付宝接口错误:您使用的私钥格式错误,请检查RSA私钥配置,charset = utf-8
查看>>
『HTML5挑战经典』是英雄就下100层-开源讲座(二)危险!英雄
查看>>
字符串替换
查看>>
android项目 之 记事本(13) ----- 查看图片及播放录音
查看>>
娱乐一下:汤姆君的大转盘算法(搞笑版)
查看>>
dubbo的泛化调用研究
查看>>
The client and server cannot communicate, because they do not possess a common algorithm
查看>>
使用C语言实现一个虚拟机
查看>>
未找到与命令“dotnet-ef”匹配的可执行文件
查看>>
pdf ppt word office转图片 教学白板
查看>>