hdu 1856 并查序 特殊优化

来源:互联网 发布:semantic ui 怎么 js 编辑:程序博客网 时间:2024/04/27 03:51
#include <stdio.h>#include<string.h>int c[10000005],k[10000005];int find(int x){int y = x;    while(x!=c[x])        x=c[x];    c[y] = x;//如果没有这一步,就会超时。 对于很大的树,这是一个非常优秀的优化    return x;}int main(){    int n,m,i,a,b,p,q;    while(scanf("%d",&n)!=EOF)    { m=1; for(i=1;i<=10000000;i++)        { c[i]=i ;k[i]=1; }                for(i=1;i<=n;i++)        {            scanf("%d%d",&a,&b);            p = find(b); q = find(a);            if(p == q) continue;            k[p]=k[q]+k[p];            c[q]=p;            if(m<k[p])m=k[p];        }        printf("%d\n",m);    }    return 0;}

0 0
原创粉丝点击