并查集
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 · 539 阅读 · 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 · 741 阅读 · 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 · 955 阅读 · 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 · 1596 阅读 · 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 · 863 阅读 · 0 评论 -
hdu 3635 Dragon Balls
/*一开始没想到一个龙珠的移动会带动别的龙珠,而且样例太水了,竟然过了,wa了n多次;在并查集find里计数,不知道是哪位大神想到的,让我想了半天才弄明白点;e[x]为x的移动数T 1 2find(1)=1,find(2)=2;e[1]=1;T 1 3find(1)=2,e[1]=e[1]+e[2]=1,find(3)=3;e[2]=1;Q 1find(原创 2012-11-23 16:10:28 · 562 阅读 · 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 · 390 阅读 · 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 · 444 阅读 · 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 · 423 阅读 · 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 · 2136 阅读 · 3 评论 -
hdu 3038 How Many Answers Are Wrong
/*这题一开始由于一个问题怎么也出不来,这问题可以用下列数据表示10 21 10 1005 6 101AC代码输出时0,不解,是我理解出错了,还是题目有问题,抑或是测试数据太水呢??????????*/#include #include int m,n,f[200002],sum[200002]; //sum[i]是表示i到根结点之间数字之和,范围是find(i)<原创 2012-11-27 16:26:13 · 499 阅读 · 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 · 623 阅读 · 0 评论