Bzoj1455 罗马游戏
2016-12-24 11:10
274 查看
Submit: 1622 Solved: 679
Description
罗马皇帝很喜欢玩杀人游戏。 他的军队里面有n个人,每个人都是一个独立的团。最近举行了一次平面几何测试,每个人都得到了一个分数。 皇帝很喜欢平面几何,他对那些得分很低的人嗤之以鼻。他决定玩这样一个游戏。 它可以发两种命令: 1. Merger(i, j)。把i所在的团和j所在的团合并成一个团。如果i, j有一个人是死人,那么就忽略该命令。 2. Kill(i)。把i所在的团里面得分最低的人杀死。如果i这个人已经死了,这条命令就忽略。 皇帝希望他每发布一条kill命令,下面的将军就把被杀的人的分数报上来。(如果这条命令被忽略,那么就报0分)
Input
第一行一个整数n(1<=n<=1000000)。n表示士兵数,m表示总命令数。 第二行n个整数,其中第i个数表示编号为i的士兵的分数。(分数都是[0..10000]之间的整数) 第三行一个整数m(1<=m<=100000) 第3+i行描述第i条命令。命令为如下两种形式: 1. M i j 2. K i
Output
如果命令是Kill,对应的请输出被杀人的分数。(如果这个人不存在,就输出0)
Sample Input
5100 90 66 99 10
7
M 1 5
K 1
K 1
M 2 3
M 3 4
K 5
K 4
Sample Output
10100
0
66
HINT
部分数据如下 JudgeOnline/upload/201607/aa.rar
Source
左偏树(可并堆)模板题
第40行fa[x]=mge,是因为x所在并查集中可能有以x为father的点,如果不修改fa[x],会导致一部分点从集合中脱离出去。
/*by SilverN*/ #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<vector> using namespace std; const int mxn=1000100; int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } struct node{ int l,r; int w; }t[mxn]; int dep[mxn]; int n,m; bool kd[mxn]; int fa[mxn]; int find(int x){ if(fa[x]==x)return x; return fa[x]=find(fa[x]); } int mge(int x,int y){ if(x*y==0)return x+y; if(t[x].w>t[y].w)swap(x,y); t[x].r=mge(t[x].r,y); if(dep[t[x].l]<dep[t[x].r])swap(t[x].l,t[x].r); dep[x]=dep[t[x].r]+1; return x; } int kill(int x){ if(kd[x])return 0; x=find(x); kd[x]=1; fa[x]=mge(t[x].l,t[x].r); fa[fa[x]]=fa[x];// return t[x].w; } int main(){ int i,j; n=read(); for(i=1;i<=n;i++){ t[i].w=read(); fa[i]=i; } dep[0]=-1; m=read(); char op[5];int x,y; for(i=1;i<=m;i++){ scanf("%s",op); if(op[0]=='M'){ x=read();y=read(); if(kd[x] || kd[y])continue; x=find(x);y=find(y); if(x!=y) fa[x]=fa[y]=mge(x,y); } else{ x=read(); printf("%d\n",kill(x)); } } return 0; }
相关文章推荐
- BZOJ1455 罗马游戏 【左偏树】
- bzoj 1455: 罗马游戏(可并堆)
- BZOJ1455: 罗马游戏
- 【BZOJ】1455 罗马游戏 左偏树
- [BZOJ1455] 罗马游戏
- 【左偏堆】bzoj1455罗马游戏
- 【bzoj1455】罗马游戏
- bzoj 1455 && tyvj 2349 罗马游戏
- 【BZOJ】1455 罗马游戏
- BZOJ 1455: 罗马游戏 左偏树裸题
- BZOJ 1455 罗马游戏 可并堆裸
- bzoj1455: 罗马游戏
- 【bzoj1455】罗马游戏
- [BZOJ1455]罗马游戏 左偏树+并查集
- bzoj1455 罗马游戏
- 【bzoj1455】罗马游戏
- BZOJ-1455 罗马游戏
- [BZOJ1455]罗马游戏(可并堆)
- BZOJ 1455 罗马游戏 左偏树
- [bzoj1455]罗马游戏 左偏树