L2-024. 部落(并查集)

并查集,背模板就AC了,基本模板就是getf函数merge函数,注意getf函数里面的que[k]=getf(que[k]),其中的que[k]=一定不能省略,这一步是压缩路径,如果少了这一步,非常容易运行超时!!!

#include<iostream>
#include<algorithm>
using namespace std;
int que[10005];
int getf(int k)
{
    return que[k]==k?k:que[k]=getf(que[k]);
}
/* int getf(int k)//运行超时 { return que[k]==k?k:getf(que[k]); } */ 
int merge(int a,int b)
{
    if (getf(a)!=getf(b))
    que[getf(a)]=getf(b); 
}
int main()
{
    int n,t,i,j,k,a,b,book[10005],count1=0,count2=0;
    fill(book,book+10005,0);
    for (i=0;i<10005;i++)
    que[i]=i;
    cin>>n;
    for (i=0;i<n;i++)
    {
        cin>>t;
        cin>>a;
        book[a]=1;
        for (j=1;j<t;j++)
        {
            cin>>b;
            book[b]=1;
            merge(a,b);
        }
    }
    for (i=0;i<10005;i++)
    {
        if (book[i]==1)
        {
            count1++;
            if (que[i]==i)
            count2++;
        }
    }
    cout<<count1<<" "<<count2<<endl;
    cin>>k;
    for (i=0;i<k;i++)
    {
        cin>>a>>b;
        if (getf(a)==getf(b))
        cout<<"Y"<<endl;
        else
        cout<<"N"<<endl;
    }
}
全部评论

相关推荐

图源网络侵权删
dddooola:这个事情我去年8月就看到有人b站(up:程序员正义)在举报了,可能一直在查,这次是查明后的处分了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
02-08 20:56
已编辑
南京工业大学 Java
在等offer的比尔很洒脱:我也是在实习,项目先不说,感觉有点点小熟悉,但是我有点疑问,这第一个实习,公司真的让实习生去部署搭建和引入mq之类的吗,是不是有点过于信任了,我实习过的两个公司都是人家正式早搭好了,根本摸不到部署搭建的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务