【并查集】 ZOJ 3789 Gears
2014-06-29 11:25
344 查看
涉及删点,带权的并查集,想清楚每种类型的并查集就好做了。。
#include <iostream> #include <sstream> #include <algorithm> #include <vector> #include <queue> #include <stack> #include <map> #include <set> #include <bitset> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <climits> #define maxn 600005 #define eps 1e-5 #define mod 1000000007 #define INF 1e9 #define lowbit(x) (x&(-x)) #define min(a, b) (a>b ? b : a) #define max(a, b) (a>b ? a : b) #define PI acos(-1) typedef long long LL; using namespace std; int pos[maxn], f[maxn]; int id[maxn], cnt[maxn]; int n, m; char s[10]; void init(void) { int i; for(i=0;i<maxn;i++){ f[i]=i; id[i]=i; pos[i]=1; cnt[i]=1; } } int find(int x) { int fa; if(x!=f[x]) fa=find(f[x]); else fa=x; pos[x]=(pos[f[x]]+pos[x])%2; f[x]=fa; return fa; } void debug(void) { int i; for(i=1;i<=4;i++) printf("%d\n", pos[i]); } void solve(void) { int top=n+1, a, b, aa, bb, tmp1, tmp2, tmp; while(m--){ scanf("%s",s); if(s[0]=='S'){ scanf("%d",&tmp); printf("%d\n", cnt[find(id[tmp])]); continue; } if(s[0]=='D'){ scanf("%d",&tmp); cnt[find(id[tmp])]--; id[tmp]=top++; continue; } if(s[0]=='L'){ scanf("%d%d",&a,&b); aa=find(id[a]); bb=find(id[b]); if(aa==bb) continue; else{ cnt[aa]+=cnt[bb]; cnt[bb]=0; f[bb]=aa; if(pos[id[a]]==pos[id[b]]) pos[bb]^=1; } continue; } scanf("%d%d",&a,&b); aa=find(id[a]); bb=find(id[b]); if(aa!=bb){ printf("Unknown\n"); continue; } tmp1=(pos[aa]-pos[id[a]]+2)%2; tmp2=(pos[bb]-pos[id[b]]+2)%2; if(tmp1==tmp2) printf("Same\n"); else printf("Different\n"); } } int main(void) { while(scanf("%d%d",&n,&m)!=EOF){ init(); solve(); } return 0; }
相关文章推荐
- ZOJ 3789 Gears(并查集)
- ZOJ 3789 - Gears (并查集)
- ZOJ 3789 Gears(并查集)
- ZOJ 3789 Gears 并查集
- ZOJ_3789_Gears(可统计集合元素个数和可删除结点的带权并查集)
- zoj 3789 并查集
- ZOJ 3789 Gears
- ZOJ 3789 并查集
- ZOJ 3789 Gears (并查集 合并+删除+离根节点的距离)
- ZOJ 3789 齿轮操作 带权并查集
- zoj 3789 并查集
- ZOJ 3811 Untrusted Patrol 并查集
- ZOJ 3656 Bit Magic(并查集)
- ZOJ 3321 Circle(并查集)
- ZOJ Problem Set - 3321 并查集
- ZOJ Problem Set - 3656 Bit Magic 并查集
- zoj 3261 - Connections in Galaxy War(并查集)
- zoj 3659 Conquer a New Region (经典并查集)
- 并查集 + Bfs 之 zoj 3811 Untrusted Patrol
- ZOJ-3261 Connections in Galaxy War 并查集 离线操作