Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- int general[100010];
- int find(int x){
- if(general[x] == x)return x;
- return general[x] = find(general[x]);
- }
- void unions(int x,int y){
- int gx = find(x);
- int gy = find(y);
- general[y] = gx;
- }
- bool isset(int x,int y){
- return find(x) == find(y);
- }
- int main()
- {
- int n,m;
- scanf("%d %d",&n,&m);
- int soldiers[n+1];
- for(int i=1;i<=n;i++)scanf("%d",&soldiers[i]);
- for(int i=1;i<=n;i++)general[i] = i;
- for(int i=1;i<=m;i++){
- int x,y;
- scanf("%d %d",&x,&y);
- if(isset(x,y)){
- printf("-1\n");
- continue;
- }
- int gx = find(x);
- int gy = find(y);
- if(soldiers[gx] > soldiers[gy]){ // x win
- unions(gx,gy);
- soldiers[gx] += soldiers[gy]/2;
- printf("%d\n",gx);
- }
- else if(soldiers[gy] > soldiers[gx]){ // y win
- unions(gy,gx);
- soldiers[gy] += soldiers[gx]/2;
- printf("%d\n",gy);
- }
- else{
- // printf("Test eq\n");
- if(gx < gy){ // x win
- unions(gx,gy);
- soldiers[gx] += soldiers[gy]/2;
- printf("%d\n",gx);
- }else{
- unions(gy,gx);
- soldiers[gy] += soldiers[gx]/2;
- printf("%d\n",gy);
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment