并差集
菜鸟起航
这个作者很懒,什么都没留下…
展开
-
hdu 2545 树上战争
//只需求出两个节点到达公共祖先节点所走的次数,只要求出节点到最原始祖先节点的次数 //并差集 #include int f[100002]; int find(int a) { int cont=0; while(f[a]!=a) { cont++; a=f[a]; } return cont; } int ma原创 2013-04-10 22:19:21 · 648 阅读 · 0 评论 -
poj 2253 (二分+判断图连通)
题意:给出n个岛的坐标,要从第一个到跳到第二个岛,跳的时候有个距离限制,求出这个距离的最小值。 思路:刚开始限制距离为两岛的直接距离,用二分每得到一个距离mid,判断1个2是否能连通。就求出最小的限制距离了。 #include #include #include const int N=210; int f[N],n; double map[N][N]; s原创 2013-09-18 20:45:43 · 951 阅读 · 0 评论 -
hdu 1232 畅通工程
#include int f[1003]; int find(int x) { if(x!=f[x]) f[x]=find(f[x]); return f[x]; } int main() { int i,j,t,a,b,n,m,num,f1,f2; while( scanf("%d",&n),n) { scanf("%d",&m);原创 2013-04-18 18:17:43 · 449 阅读 · 0 评论 -
hdu 2120 Ice_cream's world I
每加入一条边如果两个顶点的根节点相等则形成环 #include int f[1010]; int find(int a) { if(a!=f[a]) f[a]=find(f[a]); return f[a]; } int main() { int i,j,n,m,x,y,sum; while(scanf("%d%d",&n,&m)!=-1) { s原创 2013-04-22 22:46:32 · 588 阅读 · 0 评论 -
hdu 4313 Matrix
并查集 初始时没有边加入,将所有边按权值从大到小排序,然后依次判断每一个边两端的顶点是否是均为machine节点, 如果是则应删除这条边,否则加入这条边,然后在并查集合并时尽量让根节点为machine节点。 #include #include #include #include using namespace std; #define N 100100 struct edge原创 2013-04-12 20:28:46 · 539 阅读 · 0 评论