用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

HDOJ1856

2014-05-27 作者: qiu0130举报

[c++]代码库

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
const int MAX=10000001;
int father[MAX];//父节点
int friend_X[MAX];//朋友数
int Max;//最大朋友数
using namespace std;
void init()
{
    int i;
    for(i=1;i<MAX;++i)
    father[i]=i,friend_X[i]=1;//朋友数初始化都是1
}
int find_father(int x)//这里用递归省时,因为用while会超时,因为条件给的范围是一千万
{
    if(x!=father[x])//寻找父节点
    father[x]=find_father(father[x]);
    return father[x];
    /*while(x!=father[x])//这里超时过一次,以后碰到数据大的最好不要用while
    {
        x=father[x];
    }
    return x;*/
}
void join_tree(int x,int y)
{
    int a,b;
    a=find_father(x);
    b=find_father(y);
    if(a!=b)
    {
        father[a]=b;//把新的子节点并进父节点
        friend_X[b]+=friend_X[a];//每次父节点都加上新的子节点的朋友数
        if(friend_X[b]>Max)//挑选最大的父节点朋友数
        Max=friend_X[b];
    }
}
int main()
{
    int t,x,y,sum;
    while(cin>>t)
    {
        init();
        Max=1;//这里初始化是1不是0,因为当输入时0时,输出是1,就是这样我WA了一次
        while(t--)
        {
            cin>>x>>y;
            join_tree(x,y);//每次更新节点
        }
        cout<<Max<<endl;
    }
    return 0;
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...