hdu2473 Junk-Mail Filter

并查集删点问题,牺牲空间换取时间,就是给每一个点找一个替代,删除的时候只需要把替代更换就可以了

code:

#include 
#include 
using namespace std;

const int INF = 0x3fffffff;

int n,m,fa[1000000],rank[100000],rep[1000000],ind;
bool vis[1100000];

void init()
{
    for(int i=0;i'9');
    x=c-'0';
    while(c=getchar(),c>='0'&&c<='9')x=x*10+c-'0';
}

int main()
{
    int cas=0,a,b,i;
    char buf;
    while(~scanf("%d%d",&n,&m) && (n || m))
    {
        init();
        getchar();
        for(i=1;i<=m;i++)
        {
            buf=getchar();
            if(buf=='M')
            {
                scan(a);
                scan(b);
                a=find(rep[a]);
                b=find(rep[b]);
                merge(a,b);
            }else{
                scan(a);
                del(a);
            }
        }
        b=0;
        memset(vis,false,sizeof(int)*(ind+1));
        for(i=0;i


你可能感兴趣的:(并查集)