设为首页 加入收藏

TOP

HDU 2473 Junk-Mail Filter 删点并查集
2015-07-20 18:03:26 来源: 作者: 【 】 浏览:3
Tags:HDU 2473 Junk-Mail Filter 查集

删点并查集,就是用一个新的点标代替之前的点标即可。。 y一下就可以了


#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
        #include 
        
          #include 
         
           #include 
          
            #include 
           
             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
            
             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\n", Cas++, s.size()); } return 0; }
            
           
          
         
        
      
     
    
   
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Codeforces Round #258 (Div. 2) .. 下一篇C++primer读书笔记11-多态

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: