这题真的是并查集的经典题目= =

题意是给出n个人,然后给出若干的操作

1表示让a,b成为朋友,若与前面的朋友敌人关系相矛盾,输出-1

2表示让a,b成为敌人,若与前面的朋友敌人关系矛盾输出-1

3判断a,b是否是朋友,是输出1,不是输出0

4判断a,b是否是敌人,是的话输出1,不是的话输出-1

首先ab朋友关系部成立是他们刚好属于敌对的阵营。同理,a,b的敌对关系不成立的条件是他们属于同一个阵营

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using  namespace std;
const int N=10100;
int p[N],q[N],pu,pv,qu,qv;
int find(int x)
{return p[x]==x?x:find(p[x]);
}
void fun1()
{if(pu==qv&&pv==qu)//a,b属于敌对阵营
    {printf("-1\n");}else{if(qu==-1&&qv==-1)//a,b,没有敌人p[pu]=pv;合并关系else if(qu==-1)//a没有敌人p[pu]=pv;else if(qv==-1)//b没有敌人p[pv]=pu;else//a,b有敌人,但不是敌对阵营,要合并a,b的敌人让他们变成朋友
        {p[pu]=pv;p[qu]=qv;}}
}
void fun2()
{if(pu==pv)//a,b属于同一个阵营,不符合要求
    {printf("-1\n");} else{q[pu]=pv;//把a,b分别合并在他们的敌对阵营q[pv]=pu;if(qu!=-1)p[qu]=pv;if(qv!=-1)p[qv]=pu; //把a,b的敌人合并成朋友关系
    }
}
void fun3()
{if(pu==pv)printf("1\n");elseprintf("0\n");
}
void fun4()
{if(pu==qv&&pv==qu)printf("1\n");elseprintf("0\n");
}
int main()
{int n;scanf("%d",&n); for(int i=0;i<=n;i++){p[i]=i;q[i]=-1;}int a,b,c;while(scanf("%d %d %d",&c,&a,&b)!=EOF){if(!a&&!b&&!c)break;pu=find(a);pv=find(b);qu=q[pu];if(qu!=-1)qu=find(qu);qv=q[pv];if(qv!=-1)qv=find(qv);if(c==1)fun1();else if(c==2)fun2();else if(c==3)fun3();elsefun4(); }return 0;
}

转载于:https://www.cnblogs.com/NaCl/p/4928391.html

Uva(10158)相关推荐

  1. uva 10158 War (并查集)

    uva 10158 War 四个操作:1)使AB成为朋友.2)使AB成为敌人.3)询问AB是不是朋友.4)询问AB是不是敌人.PS:敌人的敌人是朋友.朋友的朋友是朋友. 开一个2 * n的数组,0~n ...

  2. 例题6-6 小球下落(Dropping Balls, UVa 679)

    例题6-6 小球下落(Dropping Balls, UVa 679) 许多的小球一个一个的从一棵满二叉树上掉下来组成一个新满二叉树,每一时间,一个正在下降的球第一个访问的是非叶子节点.然后继续下降时 ...

  3. 例题6-5 移动盒子(Boxes in a Line, UVa 12657)

    例题6-5 移动盒子(Boxes in a Line, UVa 12657) 双向链表(数组模拟) #include<iostream> #include<algorithm> ...

  4. 例题6-4 破损的键盘(又名:悲剧文本)(Broken Keyboard(a.k.a. Beiju Text), UVa 11988)

    例题6-4 破损的键盘(又名:悲剧文本)(Broken Keyboard(a.k.a. Beiju Text), UVa 11988) 链表的应用 #include<iostream> # ...

  5. 例题6-2 铁轨(Rails, ACM/ICPC CERC 1997, UVa 514)

    栈应用 例题6-2 铁轨(Rails, ACM/ICPC CERC 1997, UVa 514) 错解 1.每次要把栈清空 2.不能用空的栈(栈顶)去比较 #include<iostream&g ...

  6. 大理石在哪里?(Where is the Marble?,UVa 10474 )

    大理石在哪里?(Where is the Marble?,UVa 10474 ) Raju and Meena love to play with Marbles. They have got a l ...

  7. 勇者斗恶龙(The Dragon of Loowater, UVa 11292)

    勇者斗恶龙(改编)(The Dragon of Loowater, UVa 11292) 你的王国里有一条 n 个头的恶龙,你希望雇一些骑士把它杀死(即砍掉所有头).村 里有 m 个骑士可以雇佣,一个 ...

  8. 铁轨(UVa 514) 经典数据结构算法,铁轨问题

    铁轨(UVa 514) 经典算法,铁轨问题 关于数据结构中栈的应用, 题目: PopPush城市有一座著名的火车站.这个国家到处都是丘陵.而这个火车站是建于上一个世纪.不幸的是,那时的资金有限.所以只 ...

  9. uva 10158 - War(并查集)

    题目链接:10158 - War 题目大意:有n个人,若干个命令,每个人分属于不同的国家,并且代表国家与其他代表会谈,这将决定国与国之间的同盟关系,1:a与b结盟  2:a与b决裂(成为敌人) 3:判 ...

最新文章

  1. python代码格式-Python 代码格式
  2. 谈谈varnish、squid、apache、nginx缓存的对比
  3. Activiti邮件任务
  4. 1814: 一元三次方程求解
  5. 产品经理思维模型:从品牌营销的角度看用户
  6. 1002. 写出这个数 (20)
  7. [ZJOI2010]贪吃的老鼠
  8. PyTorch热身小案例
  9. 面向切面编程AspectJ在Android埋点的实践
  10. RabbitMq(十二) 借用死信交换机实现延迟队列
  11. python网址下载文件语言_python爬虫实战之自动下载网页音频文件
  12. 根号3136用计算机,根号1·100的平方根和立方根是多少
  13. android系统无法识别u盘,OTG无法识别U盘怎么办 OTG无法识别解决方法
  14. 【WAX链游】搭建自己的WAX网络节点
  15. mov文件如何转换成mp4视频
  16. ANSYS apdl命令流笔记14-------工作平面的变换与生成
  17. 图像篡改检测C语言,图像篡改检测和定位(二)
  18. c语言中出现nan错误,c语言中浮点运算的inf和nan错误
  19. 计算机毕业设计ssm电脑销售管理系统
  20. 2020.7.25T2魔道研究(jz暑假训练day10)

热门文章

  1. 微型计算机的实验报告,微机实验报告.doc
  2. 人们为什么使用计算机,人们为什么要用互联网
  3. shell脚本中数组的使用_Shell脚本中的数组
  4. linux中nohup命令_Linux中的Nohup命令
  5. spring aop示例_Spring批处理示例
  6. 百家与g对比oogle_如何在Java Web应用程序中集成G​​oogle reCAPTCHA
  7. 大企业中,Java面试官最爱问的问题集锦(2)
  8. Java面试问题:新的任务提交到线程池,线程池是怎样处理
  9. Thread类和Runnable接口如何运用?
  10. Hadoop_28_MapReduce_自定义 inputFormat