POJ 1703 Find them, Catch them(路径压缩并查集)

2014年03月11日 20:13:54

阅读数:881

POJ 1703 Find them, Catch them(路径压缩并查集)

http://poj.org/problem?id=1703

题意:

一个城市由N个坏人,他们分别属于两个帮派.且这两个帮派里面最少都有1个人.现在给出如下两种语句:

D a b 表示a和b肯定不在一个帮派

A a b 你需要回答a和b的关系.

输入:首先是一个T (1 <= T <= 20),表示实例个数.每个实例第一行为N (N <= 10^5)和M (M <= 10^5),接下来是M条D和A语句.

输出:回答每条A语句。

分析:

带路径压缩的并查集:

a与其父亲同帮派:r[a]=0

a与其父亲不同帮派:r[a]=1

在得到D x y 语句后 且 x和y所属的连通分量不同时 合并他们所属的树根时,要小心验证.

本题新代码依然是利用食物链那题的关系传递函数来做的而不是推到公式做的。

注意:题目说每个帮派最少有1个人,那么会不会出现说N个人,输入的关系前N-1个人都在同一个帮派,但是最后一个人没有出现过,然后问你最后一个人和前面某个人的关系?当N==2时可能出现,N>=3时不可能出现上述情况,因为题中给的只有D关系,必然一有关系就是两个人各在不同的帮派了。

#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=100000+5;int fa[maxn];
int r[maxn]; //关系
int rev(int v)
{return v;
}
int rela_2(int v1,int v2)
{if(v1==0) return v2;if(v2==0) return v1;if(v1==1 && v2==1) return 0;
}
int rela_3(int v1,int v2,int v3)
{return rela_2(rela_2(v1,v2),v3);
}
int findset(int x)
{if(fa[x]==-1) return x;int root=findset(fa[x]);//先去找父亲r[x] = rela_2(r[x] , r[fa[x]]);return fa[x]=root;
}
int bind(int u,int v,int relation)
{int fu=findset(u);int fv=findset(v);if(fu!=fv){r[fu]= rela_3(rev(r[u]),relation,r[v]);fa[fu]=fv;return 1;}return 0;
}
int get_rela(int u,int v)//得到u与v的关系
{int fu=findset(u);int fv=findset(v);if(fu!=fv) return -1;return rela_2(r[u],rev(r[v]));
}int main()
{int T;scanf("%d",&T);while(T--){int n,k;scanf("%d%d",&n,&k);memset(fa,-1,sizeof(fa));memset(r,0,sizeof(r));while(k--){char str[10];int u,v;scanf("%s%d%d",str,&u,&v);if(str[0]=='A'){int relation=get_rela(u,v);if(relation==-1) printf("Not sure yet.\n");else if(relation==0) printf("In the same gang.\n");else if(relation==1) printf("In different gangs.\n");}else if(str[0]=='D'){bind(u,v,1);}}}return 0;
}

POJ 1703 Find them, Catch them(路径压缩并查集)相关推荐

  1. POJ 1417 True Liars(路径压缩并查集+DP背包问题)

    POJ 1417 True Liars(路径压缩并查集+DP背包问题) http://poj.org/problem?id=1417 题意: 给出p1+p2个人,其中p1个是好人,p2个是坏人.然后有 ...

  2. POJ 1703 Find them, Catch them(并查集高级应用)

    POJ 1703 Find them, Catch them(并查集高级应用) 手动博客搬家:本文发表于20170805 21:25:49, 原地址https://blog.csdn.net/sunc ...

  3. 【割边缩点】解题报告:POJ - 3694 - Network(Tarjan割边缩点 + LCA + 并查集优化)

    POJ - 3694 - Network 给定一张N个点M条边的无向连通图,然后执行Q次操作,每次向图中添加一条边,并且询问当前无向图中"桥"的数量.N≤105,M≤2∗105,Q ...

  4. POJ 1984 Navigation Nightmare 【经典带权并查集】

    任意门:http://poj.org/problem?id=1984 Navigation Nightmare Time Limit: 2000MS   Memory Limit: 30000K To ...

  5. POJ - 3694 Network(边双缩点+LCA+并查集优化)

    题目链接:点击查看 题目大意:给出一个由n个点组成的无向图,现在有m次操作,每次操作都会向图中增加一条无向边,每次操作后询问当前图中有多少个桥 题目分析:题意很好理解,思路也很好想,就是代码量有点小多 ...

  6. poj 1611 The Suspects // hoj 1564 The Suspects 并查集

    /* 题目: 是说学生0怀疑有SARS病,跟他接触过的俱乐部的所有人以及他接触过的人再与别人接触, 都有可能有SARS病,要你求出给出的所有俱乐部人的名单,要你求出所有的嫌疑犯... 分析: 用并查集 ...

  7. POJ 1703 Find them, Catch them 并查集

    题意:给你t组数据,每组数据给你编号为1-n的坏人,这些坏人要么属于团伙A,要么属于团伙B,然后给你m次操作: A操作:询问x和y是不是同一个团伙 D操作:告诉你x和y不是同一个团伙 思路:和POJ ...

  8. POJ 1703 Find them, Catch them【并查集】

    题意: 有 N 个人分属于两个帮派,对应两种操作: A   X Y      询问x,y 是否属于一个帮派,或两者关系不能确定. D   X Y      X和Y 分属不同帮派 分析: 感觉就是简化版 ...

  9. POJ 1703 Find them, Catch them

    简单带权并查集0,1关系 //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio& ...

最新文章

  1. mysql出现1499错误_连接MySQL时出现1449与1045异常解决办法
  2. win7 右键菜单增加“在此以管理模式运行命令行”
  3. CTFshow 信息收集 web18
  4. Windows上搭建Python安装包MySQLdb
  5. MachineLearning(3)-流型
  6. TypeError: create_target_machine() got an unexpected keyword argument ‘jitdebug‘解决方案
  7. 压缩因子公式c语言,天然气压缩因子计算方法与流程
  8. 鲲鹏芯片的服务器,鲲鹏处理器及服务器介绍.pdf
  9. 纯文本、富文本、超文本
  10. 喜欢我们不如加入我们:来投稿吧,稿酬靠谱!
  11. 快速理清Paxos、Zab、Raft协议
  12. 警惕:互联网上充满了这样的「流量陷阱」
  13. 《Python编程:从入门到实践》基础知识部分笔记和作业
  14. 项目揭秘:公众号小说赚钱与推广的暴利玩法(干货)
  15. OpenCV之轮廓检测(检测银行卡上的黑色磁条)
  16. MFC 多线程编程总结
  17. JVM StackOverFlowError
  18. confirm 和 alert不显示ip改写
  19. windows 同时连接多个 openvpn
  20. 《Python数据分析与挖掘实战》案例--财政收入影响因素分析及预测模型

热门文章

  1. python3.7安装步骤-Python 3.7.0安装教程(附安装包) | 我爱分享网
  2. python必背100源代码-学会这个Python库,至少能减少100行代码
  3. python爬虫怎么赚钱-如何利用python爬虫挣钱
  4. 1000行代码入门python-在知乎上学 Python - 爬虫篇
  5. php7异常抛出的好处,PHP7的错误与异常
  6. 数据血缘关系图 工具_如何在论文中画出漂亮的插图?用它!丨城市数据派
  7. android ble 蓝牙绑定流程,BLE 配对与绑定过程详细解析
  8. deepin mysql教程_deepin mysql安装
  9. H5搜索页调起软键盘
  10. linux如何安装zip文件格式,如何在Linux下创建与解压,安装zip, tar, tar.gz和tar.bz2文件...