poj1308(简单并查集)】的更多相关文章

题目链接:http://poj.org/problem?id=1308 题意:x, y 表示x 与 y连接,给出一波这样的数据,问这组数据能否构成树,即不能形成回路,不能有多个根节点:要注意可以是空树: 代码: #include <iostream> #include <stdio.h> #define MAXN 1000000 using namespace std; int pre[MAXN], flag; int find(int x){ int r=x; while(pre…
题意:有编号为1到n的学生,然后有m组调查,每组调查中有a和b,表示该两个学生有同样的宗教信仰,问最多有多少种不同的宗教信仰 简单并查集 //#define LOCAL #include <iostream> #include <cstdio> #include <cstring> using namespace std; + ; int parent[maxn], n, m; int GetParent(int x) { return parent[x] == x ?…
The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 32781   Accepted: 15902 Description Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized as a global threat in mid-March 2003. T…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213 简单并查集,统计单独成树的数量. 代码: #include <stdio.h> #include <string.h> #include <math.h> #include <limits.h> #include <algorithm> #include <iostream> #include <ctype.h> #in…
Farm Irrigation Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 6   Accepted Submission(s) : 3 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description Benny has a spacious fa…
“打老虎”的背后 Time Limit: 2000/1000ms (Java/Others) Problem Description: “习大大”自担任国家主席以来大力反腐倡廉,各地打击贪腐力度也逐步加强.中国的这种令外国人不解的“风情”到底是何缘由呢?其实中国人都知道,所有的腐败问题基本上都源自官场上的“潜规则”,那“潜规则”又是源自什么呢?在中国盛行一句古语,“无关系不成方圆”,说的是中国是一个人情社会,纽带关系很强.一个人跟另一个人可能存在沾亲带故的某种“关系”,而所有通过这种“关系”的传…
B - 叠叠乐 Crawling in process... Crawling failed Time Limit:2000MS     Memory Limit:30000KB     64bit IO Format:%lld & %llu Submit Status Description   Input   Output   Sample Input   Sample Output   Hint   Description Farmer John and Betsy are playing…
Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized as a global threat in mid-March 2003. To minimize transmission to others, the best strategy is to separate the suspects from others. In the Not-Sprea…
Ubiquitous Religions   Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 22389   Accepted: 11031 Description There are so many different religions in the world today that it is difficult to keep track of them all. You are interested in fin…
城市交通线 Time Limit: 2000/1000ms (Java/Others) Problem Description: A国有n座城市,编号为1~n,这n个城市之间没有任何交通线路,所以不同城市的居民之间不能互通,所以A国的人打算为这n个城市建立k条交通线(两座城市之间可以有两条及以上的线路),交通线只能贯穿两座城市p, q(存在p=q的情况,不用考虑但会占用一条交通线), 建立交通线后两座城市的居民可以互通. 例如:建立1, 4后再建立4, 2,则1和2是互通的(1—>4—>2).…
题意:       有n个化合物,每个化合物是两种元素组成,现在要装车,但是一旦车上的化合物中的某几个化合物组成这样一组关系,有n个化合物正好用了n中元素,那么就会爆炸,输入的顺序是装车的顺序,对于每个化合物只要他装上去会爆炸,那么就不能装他(不要考虑成最优什么的,题意的意思是直接模拟),问有多少个化合物不能装车? 思路:       a个化合物正好由a中元素组成只有一种可能,那就是形成了环,那么每个化合物是两个元素组成就相当于是一条边,然后每加入一条边就判断这条边加入后会不会形成环,这个可以用…
并查集模板: #include<iostream> using namespace std; ],x,y; ]; //初始化 x 集合 void init(int n) { ; i<n; i++) { v[i]=i; Rank[i]=; } } //查找 x 所在的集合 int find_set(int x) { if(v[x]!=x) v[x]=find_set(v[x]); return v[x]; } ///更新根节点,有可能会暴栈 int mix(int x,int y) { i…
说是有N个村庄,刚开始每个村庄的网络都是受损状态,于是派一个人去修理,修理过的村庄只能联系距离他们半径为D的村庄,当然他们可以通过一些村庄当中转站,联系.   输入先输入一个N表示有N个村庄,还有一个D表示每个村庄的最大通讯半径,接着有一系列的修复操作和查询操作,如果两个地方不通那么很明显应该输出FALL,否则SUCCESS.   题意已经很明确了,就是修复查询,修复好一个点后与其他修复后的点对比一下看看是否能连接成功.     /////////////////////////////////…
Steal the Treasure Time Limit: 10000/6000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 775    Accepted Submission(s): 213 Problem Description The alliance of thieves decides to steal the treasure from country A.…
题目链接:http://poj.org/problem;jsessionid=436A34AE4BE856FB2DF9B264DCA9AA4E?id=1308 题意:给定一些边让你判断是否构成数. 思路:这道题细节很多,wa了好久.利用并查集将一棵树的节点并在一块,如果当前的边的两个端点祖先相同,则不能够成树(有环),利用num数组记录每个结点的入度,入度不能大于1.输入为 0 0表示空树,满足条件.可能出现森林,所以用vector记录出现的结点编号,最后判断所有结点是否有相同的祖先.还有不能存…
题目链接:Is It A Tree? 题意:给你一系列形如u v的点对(u v代表一条由u指向v的有向边),请问由给你的点构成的图是不是一棵树? 树的特征:①每个节点(除了根结点)只有一个入度:②只有一个根结点. 题解:用并查集合并点,对于一条边,如果连接的两点已经在同一并查集内,则可以直接判否.合并时按边的方向记录点的入度,如果某个点入度大于1也就是某个点有多个父亲节点,则说明不是树.合并时顺便记录合并总次数,最后合并点数-1次则是树. 代码: #include <stdio.h> #inc…
对与知道并查集的人来说这题太水了,裸的并查集,如果你要给别人讲述并查集可以使用这个题当做例题,代码中我使用了路径压缩,还是有一定优化作用的. #include <stdio.h> #include <string.h> const int maxn = 500005; int n, m; int pa[maxn]; void init() { for (int i = 1; i <= n; i++) { pa[i] = i; } } int find(int x) { if…
题目在这里 关于SARS病毒传染的问题.在同一个组的学生是接触很近的,后面也会有新的同学的加入.其中有一位同学感染SARS,那么该组的所有同学得了SARS.要计算出有多少位学生感染SARS了.编号为0的同学是得了SARS的. 直接用并查集解决水掉 #include<iostream> #include<stdio.h> #include<cstring> #include<cmath> #include<vector> #include<s…
题意:有编号为1~n的虫子,开始假设这种昆虫是异性恋.然后已知xi 和 yi进行交配,根据已知情况分析能否推理出其中是否有同性恋 这道题和 POJ 1182 食物链 十分相似,不过在更新与父节点关系的时候要简单一些 sex数组保存的是与父节点的性别关系,如果与父节点是同性,则为0,否则是1 每次路径压缩的同时要更新sex[a] = (sex[a] + sex[temp]) % 2; 还有就是如果x 和 y 不在一个集合,两棵树进行合并的时候,考虑x px y py 四者之间的关系,有 paren…
题目链接:http://poj.org/problem?id=2236 思路很简单,傻逼的我输出写成了FALL,然后遍历的时候for循环写错了,还好很快我就Debug出来了. #include <stdio.h> struct Point { int x,y; } points[]; ]; ]= {false}; int Find_Set (int x) { if(x!=father[x]) father[x] = Find_Set(father[x]); return father[x];…
题目大意:有一些简单的化合物,每个化合物由两种元素组成,把这些化合物按顺序装车,若k个化合物正好包含k种元素,那么就会爆炸.避免爆炸,有些化合物就不能装车.求有多少个不能装车. 题目分析:若k个化合物正好包含k种元素,那么就会爆炸.我们把每种元素看成一个顶点,每种化合物看成一条边,若有环存在的时候正好是爆炸的情况,所以避免成环记录不能放的数量就行了. #include<iostream> #include<cstdio> using namespace std; ; int f[m…
题意: 有n个电脑坏掉了,分别给出他们的坐标 有两种操作,可以O x表示修好第x台电脑,可以 S x y表示x y是否连通 两台电脑的距离不超过d便可连通,两台电脑是连通的可以直接连通也可以间接通过第三台电脑连通 思路: 每次修好一台电脑都和前面已经修好的电脑比较一下如果距离小于d而且不在同一网络,便合并在一起即可 //#define LOCAL #include <iostream> #include <cstdio> #include <cstring> using…
题目:http://poj.org/problem?id=1611 0号是病原,求多少人有可能感染 #include<stdio.h> #include<string.h> #define maxn 50000 int u,v,bin[maxn]; int find(int x) { return bin[x]==x?x:(bin[x]=find(bin[x])); }; int main() { int n,m,i,j,x,y,k,sum,t; ||m!=)) { sum=; ;…
和上一道小希的迷宫差点儿相同,可是在HDU上提交一直WA,POJ过了 HDU的数据太强了吧,强的我感觉数据有问题 题意:输入若干对点,推断是否是一颗树,转化过来也就是是否存在环 点数-边数=1,还要推断每一个点的入度都<=1 POJ AC代码 #include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <algorithm> con…
( ̄▽ ̄)" #include<iostream> #include<cstdio> using namespace std; ]; void makeSet(int n) //初始化,n个元素,处于单独集合 { ;i<n;i++) fa[i]=i; } int findSet(int x) //找到该点的粑粑 { return fa[x]=fa[x]==x?x:findSet(fa[x]); } void unionSet(int x,int y) //粑粑相同的…
#include <iostream>#include <stdio.h>#include <string.h>#include <stdlib.h>using namespace std;int n,m;int bin[50001];int findx(int x){    int r=x;    while(r!=bin[r])        r=bin[r];    int j=x,k;    while(j!=r)    {        k=bin…
Today is Ignatius' birthday. He invites a lot of friends. Now it's dinner time. Ignatius wants to know how many tables he needs at least. You have to notice that not all the friends know each other, and all the friends do not want to stay with strang…
3296: [USACO2011 Open] Learning Languages Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 436  Solved: 239[Submit][Status][Discuss] Description 农夫约翰的N(2 <= N<=10,000)头奶牛,编号为1.. N,一共会流利地使用M(1<= M <=30,000)种语言,编号从1  .. M.,第i头,会说K_i(1 <= K_i<…
= =.如果输入的两个数相等.就不是一颗树啊,不能自己指向自己. 水.(瞎开的数组). //#include <bits/stdc++.h> #include<iostream> #include<cstdio> #include<math.h> #include<string.h> #include<algorithm> using namespace std; typedef long long LL; typedef unsig…
#include<stdio.h> #define N 31000 int pre[N]; int find(int x) { if(x!=pre[x])     pre[x]=find(pre[x]); return pre[x]; } int main() {   int n,m,i,k,s,t;   while(scanf("%d%d",&n,&m),n||m){     for(i=0;i<=n;i++)         pre[i]=i;  …