博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(并查集 带关系)Find them, Catch them -- poj -- 1703
阅读量:6441 次
发布时间:2019-06-23

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

链接:

 

Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 36768   Accepted: 11294

Description

The police office in Tadu City decides to say ends to the chaos, as launch actions to root up the TWO gangs in the city, Gang Dragon and Gang Snake. However, the police first needs to identify which gang a criminal belongs to. The present question is, given two criminals; do they belong to a same clan? You must give your judgment based on incomplete information. (Since the gangsters are always acting secretly.) 
Assume N (N <= 10^5) criminals are currently in Tadu City, numbered from 1 to N. And of course, at least one of them belongs to Gang Dragon, and the same for Gang Snake. You will be given M (M <= 10^5) messages in sequence, which are in the following two kinds: 
1. D [a] [b] 
where [a] and [b] are the numbers of two criminals, and they belong to different gangs. 
2. A [a] [b] 
where [a] and [b] are the numbers of two criminals. This requires you to decide whether a and b belong to a same gang. 

Input

The first line of the input contains a single integer T (1 <= T <= 20), the number of test cases. Then T cases follow. Each test case begins with a line with two integers N and M, followed by M lines each containing one message as described above.

Output

For each message "A [a] [b]" in each case, your program should give the judgment based on the information got before. The answers might be one of "In the same gang.", "In different gangs." and "Not sure yet."

Sample Input

15 5A 1 2D 1 2A 1 2D 2 4A 1 4

Sample Output

Not sure yet.In different gangs.In the same gang.

 

代码:

#include 
#include
#include
#include
#include
#include
#include
using namespace std;#define N 100005#define INF 0x3f3f3f3fint f[N], r[N], vis[N];int Find(int x){ int k = f[x]; if(x!=f[x]) { f[x] = Find(f[x]); r[x] = (r[x]+r[k])%2; } return f[x];}int main(){ int t; scanf("%d", &t); while(t--) { int n, m, i, a, b; char s[10]; scanf("%d%d", &n, &m); memset(r, 0, sizeof(r)); memset(vis, 0, sizeof(vis)); for(i=0; i<=n; i++) f[i] = i; for(i=1; i<=m; i++) { scanf("%s%d%d", s, &a, &b); if(s[0]=='D') { int fa = Find(a); int fb = Find(b); if(fa!=fb) { f[fa]=fb; r[fa] = (r[a]-r[b]+3) % 2; } vis[a] = vis[b] = 1; } else { if(vis[a]==0 || vis[b]==0) printf("Not sure yet.\n"); else { int fa = Find(a); int fb = Find(b); if(fa!=fb) printf("Not sure yet.\n"); else { if(r[a]==r[b]) printf("In the same gang.\n"); else printf("In different gangs.\n"); } } } } } return 0;}

 

转载于:https://www.cnblogs.com/YY56/p/4789802.html

你可能感兴趣的文章
shell每日更新(7)
查看>>
单词的个数
查看>>
从程序员到项目经理(27):怎样给领导汇报工作
查看>>
eclipse工程 'cocostudio/CocoStudio.h' file not found
查看>>
045医疗项目-模块四:采购单模块—采购单提交(Dao,Service,Action三层)
查看>>
dockerfile创建php容器(安装memcached、redis、gd、xdebug扩展)
查看>>
转:面对JXTA,我迷茫了
查看>>
IT人必须学会的职场四原则
查看>>
Android之剪贴薄实现
查看>>
Sonix SN9P701 OCR点读笔二维码识别源码
查看>>
oracle 单引号 双引号 连接符
查看>>
如何使用fileupload工具来实现文件上传
查看>>
EZ GUI Button和Checkbox创建
查看>>
指针[收藏]
查看>>
审批流程设计方案-介绍(一)
查看>>
Python多进程编程
查看>>
使Eclipse下支持编写HTML/JS/CSS/JSP页面的自动提示。
查看>>
IIS_右键点击浏览网站没有反应
查看>>
POJ训练计划1035_Spell checker(串处理/暴力)
查看>>
Makefile 使用总结【转】
查看>>