博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1703 Find them, Catch them 并查集,还是有点不理解
阅读量:5837 次
发布时间:2019-06-18

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

题目不难理解,A判断2人是否属于同一帮派,D确认两人属于不同帮派。于是需要一个数组r[]来判断父亲节点和子节点的关系。具体思路可参考

#include 
#include
#include
using namespace std;const int maxn=100005;int f[maxn];int r[maxn];int Find_f(int x){ if (x != f[x]) { int t=f[x]; f[x] = Find_f(f[x]); r[x]=(r[x]+r[t])%2; return f[x]; } return f[x];}void Union(int x,int y){ int fx=Find_f(x); int fy=Find_f(y); f[fx]=fy; r[fx]=(r[x]+1+r[y])%2;}int main(){ //freopen("in.txt","r",stdin); int t; scanf("%d",&t); while(t--) { int n,m; scanf("%d%d",&n,&m); for(int i=1; i<=n; i++) { f[i]=i; r[i]=0; } char c; int crime1,crime2; while(m--) { getchar(); scanf("%c%d%d",&c,&crime1,&crime2); //printf("%c\n",c); if(c=='D') Union(crime1,crime2); else if(c=='A') { if(Find_f(crime1)==Find_f(crime2)) if(r[crime1]!=r[crime2]) printf("In different gangs.\n"); else printf("In the same gang.\n"); else printf("Not sure yet.\n"); } } } return 0;}

 

转载于:https://www.cnblogs.com/pach/p/5749644.html

你可能感兴趣的文章
存储过程Oracle(一)
查看>>
log4j日志归档
查看>>
Java笔记01——IO流
查看>>
mysql遇见error,1049
查看>>
NYOJ311 完全背包
查看>>
codevs——2822 爱在心中
查看>>
Python基础班---第一部分(基础)---Python基础知识---认识Python
查看>>
JAVA MAC 配置
查看>>
1134 最长上升子序列 (序列型 DP)
查看>>
js冒泡排序
查看>>
第一次作业 4班卢炳武
查看>>
const int * 与 int *const
查看>>
抽象类的调用
查看>>
使用硬盘,安装双系统,Win7+CentOS
查看>>
Javascript学习总结
查看>>
JS 操作Excel格式
查看>>
php 用正则替换中文字符一系列问题解决
查看>>
ActiveMQ应用笔记一:基本概念&安装
查看>>
SAE+Java+jetty
查看>>
大话数据结构之四(串)
查看>>