并查集
灰黑飞
用智慧的程序写出美好的未来。
展开
-
hdu 1198
#include #include char m1[100][100];//上下相连 char m2[100][100];//左右相连 int prm[3000]; char map[100][100]; void prepare() { int i,j; char up[10]="ABEGHJK"; char dowm[10]="CDEHIJK"; char left[10]="ACFG原创 2014-08-02 14:01:14 · 387 阅读 · 0 评论 -
hdu 1856
#include #include int prm[100010]; int a[100010]; int b[100010]; int find(int n) { if(n==prm[n]) return n; prm[n]=find(prm[n]); return prm[n]; } int main() { int n,max,min,i,x,y,f1,f2,t; while(原创 2014-08-02 14:05:31 · 411 阅读 · 0 评论 -
hdu 2473
#include #include #define N 2000200 int mark[N]; struct node { int pre;//a[i]的父节点 int rep;//a[i]当前的值 }a[N]; int find(int n) { if(n==a[n].pre) return n; a[n].pre=find(a[n].pre); return a[n].pre;原创 2014-08-02 14:03:40 · 430 阅读 · 0 评论 -
hdu 2860
#include #include #include int prm[100100]; int a[100100],b[100100],c[100100]; int d[100100]; char s[100100][10]; int find(int n) { if(n==prm[n]) return n; prm[n]=find(prm[n]); return prm[n]; } i原创 2014-08-02 14:04:11 · 444 阅读 · 0 评论 -
hdu 3635
#include int prm[10010],num[10010],k; char str[10]; int find(int n) { k++;//为了求龙珠的转移次数。 if(n==prm[n]) return n; n=find(prm[n]);//没有路径压缩 return n; } int main() { int t,ii,i,f1,f2,ans,a,b,n,m; s原创 2014-08-02 14:05:06 · 322 阅读 · 0 评论 -
hdu 1325
#include #define N 100010 int prm[N]; int father[N]; int find(int n) { if(n==prm[n]) return n; prm[n]=find(prm[n]); return prm[n]; } int main() { int t=1,n,m,ans,k,i,x,y,p; while(scanf("%d%d",&原创 2014-08-02 14:04:35 · 353 阅读 · 0 评论 -
hdu 3371
#include #include #define N 26000 int sum; int prm[600]; struct node { int x,y,w; }a[N]; int cmp(const void *a,const void *b) { struct node*c=(struct node*)a; struct node*d=(struct node*)b; return原创 2014-08-02 14:06:53 · 344 阅读 · 0 评论 -
hdu 1213
#include #include int prm[1010]; int mark[1010]; int find(int n) { if(n==prm[n]) return n; prm[n]=find(prm[n]); return prm[n]; } int main() { int t,i,ans,f1,f2,tt,n,m,a,b; scanf("%d",&t); whil原创 2014-08-02 14:01:51 · 321 阅读 · 0 评论 -
hdu 1829
#include #include int root[2010],sex[2010]; int find(int n) { if(n==root[n]) return n; root[n]=find(root[n]); return root[n]; } void join(int x,int y) { int f1,f2; f1=find(x); f2=find(y); if(原创 2014-08-02 14:02:51 · 362 阅读 · 0 评论