tyvj微子危机——建造

来源:互联网 发布:javascript 爬虫 编辑:程序博客网 时间:2024/04/29 12:41

http://www.tyvj.cn/Problem_Show.aspx?id=1220

和食物链差不多,把行列拆开 ,合并行列所对应的集合。最后统计有价值的行列 最后并成多少个集合

#include<stdio.h>int father[200005],value[200005],b1[200005];int getfather(int x){    if(x!=father[x])        father[x]=getfather(father[x]);    return father[x];}void add(int a,int b){    int fa=getfather(a); int fb=getfather(b);    if(fa!=fb)        father[fb]=fa;}int main(){    int i,m,n,k,a,b,ans=0;    scanf("%d%d%d",&n,&m,&k);    memset(value,0,sizeof(value));    memset(b1,0,sizeof(b1));    for(i=1;i<=m+n;i++)        father[i]=i;    for(i=1;i<=k;i++)    {        scanf("%d%d",&a,&b);        b+=n;        value[a]=1;value[b]=1; add(a,b);    }    for(i=1;i<=n+m;i++)    {        if(value[i]) b1[getfather(i)]=1;    }    for(i=1;i<=n+m;i++) if(b1[i]) ans++;    printf("%d\n",ans-1);    return 0;}


0 0
原创粉丝点击