并查集
不可不戒
这个作者很懒,什么都没留下…
展开
-
hdu1213 How Many Tables
#include #include int father[1002];//并查集int find (int k){ if(father[k]!=k) father[k]=find(father[k]); return father[k];}void make(int x,int y){ int f1=find(x); int f2=find(y); if(f1!=f原创 2013-07-08 00:38:29 · 741 阅读 · 0 评论 -
hdu2473 Junk-Mail Filter (并查集删除节点)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2473题解:为每一个结点加一个虚根,这样每个结点都是叶子结点.插入结点时,把它们都并到虚根的集合中.删除结点时,只要把它的父结点置为一个无用的虚根。#include #include #define MAXN 1000002int father[MAXN<<1],flag原创 2013-08-27 12:26:15 · 717 阅读 · 0 评论 -
hdu1598 find the most comfortable road
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1598#include #include #include #define INF 9999999#define MAXN 1002struct node { int st,end,val;}edge[MAXN];int father[202];int cmp(co原创 2013-08-26 19:01:41 · 613 阅读 · 0 评论 -
hdu3371 Connect the Cities (最小生成树)
#include #include using namespace std;struct node{ int x,y,val;}w[25002*3];int father[505];bool cmp(const node &a,const node &b){ return a.val<b.val;}int find(int x){ while(x!=father[原创 2013-07-13 09:54:58 · 735 阅读 · 0 评论 -
hdu1272 小希的迷宫
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272题解:任意两个房间有且仅有一条路径可以相通,判断是否是一棵树(不存在回路)#include #include #define MAXN 100002int father[MAXN],flag[MAXN],sig;int find(int x){ while(原创 2013-08-26 11:56:59 · 582 阅读 · 0 评论 -
hdu1232 畅通工程
#include #include int father[1002],sum;//并查集int find (int k){ if(father[k]!=k) father[k]=find(father[k]); return father[k];}void make(int x,int y){ int f1=find(x); int f2=find(y); if(f原创 2013-07-07 20:14:33 · 635 阅读 · 0 评论 -
hdu3635 Dragon Balls
#include #include #define MAXN 10005//移动的次数其实就是它自己本身移动的次数加上其所有父亲移动的次数int father[MAXN],num[MAXN],move[MAXN];void Init(int n){ int i; for (i=1;i<=n;i++) { father[i]=i; num[i]=1; move[i]=原创 2013-07-17 19:00:14 · 626 阅读 · 0 评论 -
hdu1829 A Bug's Life
#include #include #define MAXN 2002int father[MAXN],sex[MAXN];int find(int x) {//带路径压缩的查找算法 int i,r=x; while(r!=father[r])//循环结束,则找到根节点 r=father[r]; i=x; while(i!=r)//本循环修改查找路径原创 2013-07-15 14:31:05 · 864 阅读 · 0 评论 -
hdu1558 Segment set
#include#include #define MAXN 1005int father[MAXN],num[MAXN];typedef struct node{ double x,y;}point;struct edge{ point p1; point p2;} seg[MAXN];double Max(double x,double y){ return原创 2013-07-15 19:25:51 · 668 阅读 · 0 评论 -
hdu3172 Virtual Friends
#include #include #include #include #define MAXN 100003using namespace std;mapm;int father[MAXN],num[MAXN];int find(int x){//带路径压缩的查找算法 int r=x; while(r!=father[r])//循环结束,则找到根节点 r=fathe原创 2013-07-15 13:48:04 · 760 阅读 · 0 评论 -
hdu1116 Play on Words
/*这题是判断图是否为欧拉回路,满足以下任一条件即为欧拉回路:1)所有的点联通(用并查集判断);2)欧拉回路中所有点的入度和出度一样;3)欧拉通路中起点的入度 - 出度 = 1,终点的 初度 - 入度 = 1, 且其他的所有点入度 = 出度。*/#include #include #define MAX 32int father[MAX],in_degree[MAX],原创 2013-07-14 11:40:21 · 727 阅读 · 0 评论 -
hdu2818 Building Block
//并查集好题,对并查集有了深入的理解#include int father[30005];int num[30005];//树的深度int lownum[30005];//树某节点下面的节点数int find(int x){ int temp; if(x==father[x]) return x; temp=find(father[x]); lownum[x]+=low原创 2013-07-12 00:50:45 · 719 阅读 · 0 评论 -
hdu2545 树上战争
#include int father[100002];int find(int x){ int sum=0; while(x!=father[x]) { x=father[x]; sum++; } return sum;}int main(){ int n,m,i,x,y; while(scanf("%d %d",&n,&m)&&n) { for(i原创 2013-07-11 21:56:00 · 801 阅读 · 0 评论 -
hdu1856 More is better
#include //求并查集,元素最多的集合struct node{ int a,b;}arr[100002];int father[10000002],rank[10000002];int find(int x){ if(father[x]!=x) father[x]=find(father[x]); return father[x];}int main原创 2013-07-08 01:06:52 · 728 阅读 · 0 评论 -
hdu1863 畅通工程
#include #include using namespace std;int father[102];struct node{ int a,b,value;}w[5002];bool cmp(const node &a,const node &b){ return a.value<b.value;}int find(int x){ if(x!=father[原创 2013-07-07 21:16:51 · 706 阅读 · 0 评论 -
hdu1233 还是畅通工程
#include #include using namespace std;int father[102];struct node{ int a,b,value;}w[5002];bool cmp(const node &a,const node &b){ return a.value<b.value;}int find(int x){ if(x!=father[原创 2013-07-07 20:46:02 · 837 阅读 · 0 评论 -
hdu4496 D-City
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4496题解:删除一条边,求剩余连通分量的个数,从后往前,初始状态ans[m-1]=n,每加一条边,判断两顶点是否属于同一个连通分量.是连通分量少一个,不是连通分量个数不变。#include #include #define MAXN 10002int fat原创 2013-09-23 21:48:19 · 577 阅读 · 0 评论