poj1611(并查集简单应用)

题目链接:http://poj.org/problem?id=1611

思路:

显然是一个并查集的题,很简单,只要将一个group中的学生并在一起,最后遍历1到n-1,看有多少学生的祖先与0的祖先相等即可。

代码如下:

 1 #include<cstdio>
 2 using namespace std;
 3
 4 int n,m,res,root[30005];
 5
 6 int getr(int k){
 7     if(root[k]==k) return k;
 8     else return root[k]=getr(root[k]);
 9 }
10
11 int main(){
12     while(~scanf("%d%d",&n,&m),n){
13         res=1;
14         for(int i=0;i<n;++i) root[i]=i;
15         while(m--){
16             int num,tmp1,tmp2;
17             scanf("%d",&num);
18             if(num>0){
19                 scanf("%d",&tmp1);
20                 num--;
21                 while(num--){
22                     scanf("%d",&tmp2);
23                     root[getr(tmp2)]=getr(tmp1);
24                 }
25             }
26         }
27         int tmp=getr(0);
28         for(int i=1;i<n;++i)
29             if(getr(i)==tmp)
30                 ++res;
31         printf("%d\n",res);
32     }
33     return 0;
34 }

原文地址:https://www.cnblogs.com/FrankChen831X/p/10451980.html

时间: 2024-10-08 17:41:07

poj1611(并查集简单应用)的相关文章

RQNOJ36 数石子 并查集 简单应用

题目描述 佳佳是个贪玩的孩子.一天,他正在跟凡凡玩“数石子”的游戏.佳佳在地上摆了N堆石子,其中第I堆石子有Ai个石头.佳佳每次都会问凡凡:“凡凡,请问从第I堆到第J堆,总共有多少个石子?”聪明的凡凡每次都能快速而准确地回答对.凡凡老是被问问题,心里有些不服,就对佳佳说:“佳佳,你还记得你问了什么问题,我回答了什么答案吗?”佳佳说当然记得.于是凡凡说:“好,我把石子拿走,再问你一些相似的问题,你能答得出来吗?”佳佳张圆了嘴巴,望着凡凡,一脸疑问和惊讶的表情.你现在知道了游戏规则和过程,但没看见原

poj2236 Wireless Network 并查集简单应用

Description An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wireless network with the lap computers, but an unexpected aftershock attacked, all computers in the network were all broken. The computers

poj2236和poj1611并查集问题

POJ 2236 问在计算机坏了,修复若干,问检测两台是否能连通 #include <iostream> #include <string.h> #include <stdio.h> using namespace std; const int N = 1005; struct Point { int x,y; }; Point p[N]; int repaired[N]; int pre[N],rank[N]; int dist(Point A,Point B) {

poj1611 并查集 (路径不压缩)

http://poj.org/problem?id=1611 题目大意: 有一个学校,有N个学生,编号为0-N-1,现在0号学生感染了非典,凡是和0在一个社团的人就会感染,并且这些人如果还参加了别的社团,他所在的社团照样全部感染,求感染的人数. 解题思路: 并查集的变种,实质就是求0所在的强连通图的结点数目. 这道题纠结在数据的输入上,他只是告诉你哪些学生是同一个社团的.这就需要处理一下,我的想法是:如果这个社团有num个孩子,new出一个大小为num的数组,第一个孩子不处理,从第二个孩子起,和

UVALive 6091 并查集简单应用

点击打开链接 题意:问你给出的图中有多少颗树,树的定义与最小生成树类似,不能有重边或者环 思路:直接用并查集统计一下当前集合里的边的数量以及点的数量,如果点的数量与边的数量相等,那么是一颗树,统计完即可,水题~~~ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <iostream> #include <algorithm> using namespace s

并查集简单题

The Suspects 题目传送:POJ-1611-The Suspects AC代码: #include <map> #include <set> #include <cmath> #include <deque> #include <queue> #include <stack> #include <cstdio> #include <cctype> #include <string> #in

poj1611(并查集)

The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 48053   Accepted: 23003 Description Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized as a global threat in mid-March 2003. T

详解并查集

详解并查集  Powered by WSY in SSF    2019-11-02  13:46 [1]并查集的定义:   并查集(Disjoint  Set)是一种非常精巧的非常实用的数据结构,它主要用来处理一些不相交集合的合并问题,经典的例子有联通子图,最小生成树的克鲁斯-卡尔算法. [2]并查集的经典问题:   我们通常使用“帮派”.“团伙”等问题举例说明并查集.例如帮派问题: 在某城市里住着n个人,任何两个认识的人不是朋友就是敌人,而且满足: 1. 我朋友的朋友是我的朋友: 2. 我敌

无间道之并查集 (hihocoder第十四周i)

时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 这天天气晴朗.阳光明媚.鸟语花香,空气中弥漫着春天的气息……额,说远了,总之,小Hi和小Ho决定趁着这朗朗春光出去玩. 但是刚刚离开居住的宾馆不久,抄近道不小心走入了一条偏僻小道的小Hi和小Ho就发现自己的前方走来了几个彪形大汉,定睛一看还都是地地道道的黑人兄弟!小Hi和小Ho这下就慌了神,捡肥皂事小,这一身百把来斤别一不小心葬身他乡可就没处说去了. 就在两人正举足无措之时,为首的黑叔叔从怀里掏出了一件东西——两张花花