HDU2473 并查集的删除

来源:互联网 发布:python读取csv文件 编辑:程序博客网 时间:2024/05/21 17:43
并不是真正的删除,而是把删除的点连到了虚根#include<stdio.h>#include<iostream>#include<string.h>#include<algorithm>using namespace std;const int maxnum=1100010;int fa[maxnum];int temp[maxnum];int mark[maxnum];int n,m,w;void init(){    int i;    for(i=0;i<n;i++)    {        fa[i]=i;        temp[i]=i;    }    w=n;}int find(int x){    if(fa[x]==x)        return x;    else    {        return fa[x]=find(fa[x]);    }}int main(){    int cnt=1;    while(scanf("%d%d",&n,&m)!=EOF)    {        if(n==0&&m==0)            break;        init();        memset(mark,0,sizeof(mark));        int i;        for(i=1;i<=m;i++)        {            char a;            cin>>a;            if(a=='M')            {                int c,d;                scanf("%d%d",&c,&d);                int x=find(temp[c]);                int y=find(temp[d]);                if(x==y)                    continue;                else                  fa[x]=y;            }            else            {                int c;                scanf("%d",&c);                fa[w]=w;                temp[c]=w++;                }        }        int ans=0;        for(i=0;i<n;i++)        {            int p=find(temp[i]);            //cout<<p<<endl;            if(mark[p]==0)            {                ans++;                mark[p]=1;            }        }        printf("Case #%d: %d\n",cnt++,ans);    }}

0 0
原创粉丝点击