ZOJ 3216(并查集)
2014-04-17 16:27
288 查看
祖先节点记录p最大之中,编号最小的节点的编号,离线处理query就避免了分离的情况。
#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<queue> #include<iostream> #include<vector> using namespace std; #define N 100005 int par ; int rank ; int p ; void init(int tn) { for(int i=0;i<tn;i++)par[i]=i,rank[i]=0; } int find(int x) { if(x==par[x])return x; return par[x]=find(par[x]); } void unite(int x,int y) { x=find(x); y=find(y); if(x==y)return; if(p[x]>p[y])par[y]=x; else if(p[x]<p[y])par[x]=y; else if(x<y)par[y]=x; else par[x]=y; } bool same(int x,int y) { return find(x)==find(y); } void swap(int &a,int &b) { a=a^b;b=a^b;a=a^b; } int n,m,q; int ans ,cnt; struct node { int op; int a,b; }query ; vector<int>v ; int main() { bool flag=false; while(scanf("%d",&n)!=EOF) { if(flag)printf("\n"); flag=true; init(n); cnt=0; int i,j; for(i=0;i<n;i++)v[i].clear(); for(i=0;i<n;i++)scanf("%d",&p[i]); scanf("%d",&m); int a,b; while(m--) { scanf("%d%d",&a,&b); if(a>b)swap(a,b); v[a].push_back(b); } scanf("%d",&q); for(i=0;i<q;i++) { char op[15]; scanf("%s",op); if(op[0]=='d') { query[i].op=0; scanf("%d%d",&query[i].a,&query[i].b); if(query[i].a>query[i].b)swap(query[i].a,query[i].b); for(j=0;j<v[query[i].a].size();j++) { if(query[i].b==v[query[i].a][j])v[query[i].a][j]=-1; } } else { query[i].op=1; scanf("%d",&query[i].a); } } for(i=0;i<n;i++) { for(j=0;j<v[i].size();j++) { if(v[i][j]!=-1)unite(i,v[i][j]); } } for(i=q-1;i>=0;i--) { if(query[i].op==0)unite(query[i].a,query[i].b); else { int temp=find(query[i].a); if(p[query[i].a]<p[temp])ans[cnt++]=temp; else ans[cnt++]=-1; } } for(i=cnt-1;i>=0;i--)printf("%d\n",ans[i]); } return 0; }
相关文章推荐
- ZOJ 3963 Heap Partition( 并查集 + 贪心 +二分 )
- ZOJ 3761——Easy billiards(DFS,并查集)
- ZOJ 3261 Connections in Galaxy War【并查集】
- ZOJ 3261 Connections in Galaxy War (并查集)
- 逆向并查集(ZOJ 3261)
- zoj 3659 Conquer a New Region(并查集)
- ZOJ - 3261 逆向并查集
- ZOJ1789(The Suspects)j简单并查集
- ZOJ 3649 Social Net 最大生成树 + 并查集维护
- zoj 3811||牡丹江网赛 c题 并查集
- ZOJ 3659 & HDU 4424 Conquer a New Region (并查集)
- zoj 3963 Heap Partition(并查集,贪心,二分)
- zoj 3261 逆向并查集
- ZOJ 3261 Connections in GalaxyWar(并查集:离线处理)
- ZOJ 3261 Connections in Galaxy War【并查集】
- POJ 1962/ ZOJ 2178: Corporative Network - 并查集
- zoj 1789The Suspects 并查集
- ZOJ 3789 Gears 并查集
- hdu 4424 & zoj 3659 Conquer a New Region (并查集 + 贪心)
- zoj 3261 逆向并查集+离线处理