并查集
knownothing
这个作者很懒,什么都没留下…
展开
-
hdu 3047 Zjnu Stadium
/* 自己太水了,参考大神才写出来的。 路径压缩。。没接触过 题意应该是,输入a,b,c;b在a的后面c处,虽然题目是300的环,可它在同一列就可以,所以可以看成无限长的直线,只要注意已确定位置的两个人再次输出的情况 */ #include #include int f[50005],d[50005];//d[i]为i在其根结点后多远 int n,m,t; int a,b,c; i原创 2012-11-25 22:57:13 · 525 阅读 · 0 评论 -
uvalive 3027 Corporative Network 并查集+路径压缩
代码: #include #include #include #include #include #include #include #include #include #include using namespace std; const int maxn=2e4+10; int f[maxn],c[maxn]; int findset(int x) { if(f原创 2014-08-02 10:58:15 · 712 阅读 · 0 评论 -
hdu 2818 Building Block 并查集(边搜索边更新)
#include #include #include #include #include #include using namespace std; const int maxn=3e4+10; int f[maxn],c[maxn],num[maxn]; int find(int x) { if(x!=f[x]) { int t=find(f[x]);转载 2013-09-24 21:12:50 · 921 阅读 · 0 评论 -
hdu 4750 Count The Pairs 并查集+递推(2013 ACM/ICPC Asia Regional Nanjing Online 1003)
#include #include #include #include #include #include #include using namespace std; const int maxn=1e4+10; const int maxm=5e5+10; struct node{ int a,b,c; }e[maxm]; int f[maxn],n,m,ans[maxm]原创 2013-09-21 16:56:48 · 1564 阅读 · 2 评论 -
hdu 1232 畅通工程 并查集基础题
#include #include #include #include #include using namespace std; int f[1005]; int find(int x)//把一个集合内的数连成一个串,f[x]表示x在串中的父节点,find(x),用于查找根节点。 { if(f[x]!=x)f[x]=find(f[x]); return f[x]原创 2013-08-28 14:27:37 · 828 阅读 · 0 评论 -
hdu 3635 Dragon Balls
/* 一开始没想到一个龙珠的移动会带动别的龙珠,而且样例太水了,竟然过了,wa了n多次; 在并查集find里计数,不知道是哪位大神想到的,让我想了半天才弄明白点; e[x]为x的移动数 T 1 2 find(1)=1,find(2)=2; e[1]=1; T 1 3 find(1)=2,e[1]=e[1]+e[2]=1,find(3)=3; e[2]=1; Q 1 find(原创 2012-11-23 16:10:28 · 552 阅读 · 0 评论 -
hdu 1598 find the most comfortable road
#include #include #include using namespace std; int n,m,f[202]; struct node{ int x,y,w; }e[1001]; int cmp(node a,node b) { return a.w>b.w; } int find(int x) { if(f[x]!=x) f[x]=find原创 2012-11-23 14:20:00 · 379 阅读 · 0 评论 -
hdu 1811 Rank of Tetris
/* 拓扑以前没用过,现学了下,很简单;邻接表忘了怎么用。。不想用带指针的,就重学了下非指针的邻接表 */#include #include #include #include using namespace std; struct node{ int to,next; }e[20001]; int head[10001],tt,f[10001],g[10001],n,m,s原创 2012-11-21 22:48:18 · 433 阅读 · 0 评论 -
hdu 1198 Farm Irrigation
#include int m,n,f[2505]; char e[55][55]; int find(int x) { if(f[x]!=x) f[x]=find(f[x]); return f[x]; } void judge(int a,int b) { int aa,bb; aa=find(a); bb=find(b); if(aa!=bb) f[aa]=bb; } int原创 2012-11-20 15:56:36 · 414 阅读 · 0 评论 -
hdu 1325 Is It A Tree?
/* 人倒霉起来什么都悲催,今天竟然被题目水了 没看清题目在加上惯性思维,以为是输入都是-1时结尾 献用G++交,runtime,我开始开打数组,再C++交TLE,我开始开小数组 最后才发现原来输入是以小于0结尾的,*/ #include #include int f[1001],g[1001]; int find(int x) //并查集的查找,找到共原创 2012-11-18 15:52:38 · 2122 阅读 · 3 评论 -
hdu 3038 How Many Answers Are Wrong
/* 这题一开始由于一个问题怎么也出不来,这问题可以用下列数据表示 10 2 1 10 100 5 6 101 AC代码输出时0,不解,是我理解出错了,还是题目有问题,抑或是测试数据太水呢?????????? */ #include #include int m,n,f[200002],sum[200002]; //sum[i]是表示i到根结点之间数字之和,范围是find(i)<原创 2012-11-27 16:26:13 · 485 阅读 · 0 评论 -
poj 1733 Parity game 并查集+路径压缩
代码: #include #include #include #include #include #include #include #include #include using namespace std; const int maxn=1e4+10; int f[maxn],c[maxn]; mapmm; int findset(int x) { if(f[x]原创 2014-08-08 15:40:40 · 595 阅读 · 0 评论