
并差集
菜鸟起航
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
hdu 2545 树上战争
//只需求出两个节点到达公共祖先节点所走的次数,只要求出节点到最原始祖先节点的次数//并差集#includeint 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 · 679 阅读 · 0 评论 -
poj 2253 (二分+判断图连通)
题意:给出n个岛的坐标,要从第一个到跳到第二个岛,跳的时候有个距离限制,求出这个距离的最小值。思路:刚开始限制距离为两岛的直接距离,用二分每得到一个距离mid,判断1个2是否能连通。就求出最小的限制距离了。#include#include#includeconst int N=210;int f[N],n;double map[N][N];s原创 2013-09-18 20:45:43 · 976 阅读 · 0 评论 -
hdu 1232 畅通工程
#includeint 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 · 466 阅读 · 0 评论 -
hdu 2120 Ice_cream's world I
每加入一条边如果两个顶点的根节点相等则形成环 #includeint 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 · 601 阅读 · 0 评论 -
hdu 4313 Matrix
并查集初始时没有边加入,将所有边按权值从大到小排序,然后依次判断每一个边两端的顶点是否是均为machine节点,如果是则应删除这条边,否则加入这条边,然后在并查集合并时尽量让根节点为machine节点。#include#include#include#include using namespace std;#define N 100100struct edge原创 2013-04-12 20:28:46 · 572 阅读 · 0 评论