zoukankan      html  css  js  c++  java
  • HDU 2473 Junk-Mail Filter 删点并查集

    删点并查集,就是用一个新的点标取代之前的点标就可以。

    。 y一下就能够了


    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <string.h>
    #include <vector>
    #include <map>
    #include <queue>
    #include <math.h>
    #include <string>
    #include <set>
    using namespace std;
    #define mod 1000000007
    #define ll int
    #define N 100101
    ll r[1100010], f[1100010], a[N], top;
    ll n, m;
    ll find(ll x){return x==f[x]?x:f[x] = find(f[x]);}
    void Union(ll x, ll y){
        ll fx = find(x), fy = find(y);
        if(fx==fy)  return;
        if(r[fx]>r[fy])  swap(fx,fy);
        f[fx] = fy;
        r[fy] += r[fx];
    }
    void Del(ll x){
    	find(a[x]);
    	a[x] = top;
    	r[top] = 1;
    	f[top] = top;
    	top++;
    }
    void init(){
        for(ll i = 0; i < n; i++)
            f[i] = a[i] = i, r[i] = 1;
    	top = n;
    }
    set<int>s;
    int main(){
    	int i, j, u, v, Cas = 1;
    	while(scanf("%d %d",&n,&m), n+m){
    		init();
    		while(m--)
    		{
    			char c[10]; scanf("%s %d",c,&u);
    			if(c[0]=='M')
    			{
    				scanf("%d",&v);
    				Union(a[u], a[v]);
    			}
    			else Del(u);
    		}
    		s.clear();
    		for(i = 0; i < n; i++) 
    		for(i = 0; i < n; i++)
    			s.insert(find(a[i]));
    		printf("Case #%d: %d
    ", Cas++, s.size());
    	}
    	return 0;
    }


  • 相关阅读:
    180322
    20180317
    C语言编译器
    PAT甲级_PAT Advanced Level 1002. A+B for Polynomials (25) C
    java中的装箱与拆箱
    PAT甲级_PAT Advanced Level 1002. A+B for Polynomials (25)
    Java(3)_Ideal 使用指南
    4.jmeter参数化实战
    1.jmeter搭建环境
    Python_异常机制及日志
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7127936.html
Copyright © 2011-2022 走看看