QZQ-钱哲琦

每天走在疯狂追梦的大街上。我们衣衫褴褛,却毫无倦意。

hdu 1856 并查序 特殊优化

#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;
}

阅读更多
版权声明:转载注明出处。有任何疑问可留言。 https://blog.csdn.net/Techmonster/article/details/49952223
个人分类: ACM算法竞赛
上一篇hdu 1561 树形dp 入门教学
下一篇hdu1247+hdu1075 字典树基础
想对作者说点什么? 我来说一句

hdu acm 教案(8)

2008年10月02日 1.11MB 下载

没有更多推荐了,返回首页

关闭
关闭