HDU 2473 Junk-Mail Filter 删点并查集
2014-07-25 22:51
351 查看
删点并查集,就是用一个新的点标代替之前的点标即可。。 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 , 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\n", Cas++, s.size()); } return 0; }
相关文章推荐
- HDU 2473 Junk-Mail Filter 【并查集+设立虚父节点(马甲)】
- HDU 2473 Junk-Mail Filter 并查集,虚拟删除操作
- HDU 2473 Junk-Mail Filter (并查集的删除操作)
- 来个杭电的题 ---并查集 HDU 2473 Junk-Mail Filter
- hdu 2473 Junk-Mail Filter(删除节点操作的并查集)
- HDU 2473 Junk-Mail Filter(并查集删点)
- HDU 2473 Junk-Mail Filter(并查集删除节点)
- HDU 2473-Junk-Mail Filter-并查集删除
- HDU 2473 Junk-Mail Filter (删点并查集)
- HDU 2473 Junk-Mail Filter(并查集+删点,设立虚父节点/找个代理)
- HDU 2473 Junk-Mail Filter(并查集 | 删除操作)
- hdu 2473 Junk-Mail Filter【并查集好题、建立虚拟节点】
- HDU 2473 Junk-Mail Filter (并查集节点删除)
- HDU-2473-Junk-Mail Filter-并查集的删除操作
- HDU 2473 Junk-Mail Filter 删点并查集
- HDU 2473 Junk-Mail Filter(带分离操作的并查集)
- HDU-2473 Junk-Mail Filter(并查集的删除)
- HDU 2473 Junk-Mail Filter 并查集 惰性删除
- hdu 2473 Junk-Mail Filter(并查集_虚节点)2008 Asia Regional Hangzhou
- HDU 2473 Junk-Mail Filter 并查集 删点