Advertisement
Slayerfeed

Generalfight

Apr 21st, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.90 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3.  
  4. using namespace std;
  5.  
  6. int parent[100010];
  7. int r[100010];
  8. int findgeneral(int u){
  9.     if(parent[u]==u){
  10.         return u;
  11.     }
  12.     return parent[u] = findgeneral(parent[u]);
  13.  
  14. }
  15.  
  16. void fight(int u, int v){
  17.     u=findgeneral(u);
  18.     v=findgeneral(v);
  19.     if(u==v){
  20.         printf("-1\n");
  21.         return ;
  22.     }
  23.     if(r[v]>r[u]){
  24.         r[v]+=r[u]/2;
  25.         printf("%d\n",v);
  26.         parent[u]=v;
  27.     }
  28.     else{
  29.         r[u]+=r[v]/2;
  30.         printf("%d\n",u);
  31.         parent[v]=u;
  32.     }
  33.  
  34. }
  35. int main(){
  36.     int n ,m;
  37.     scanf("%d%d",&n,&m);
  38.  
  39.  
  40.     for(int i=1;i<=n;++i){
  41.         parent[i]=i;
  42.         scanf("%d",&r[i]);
  43.     }
  44.     int u,v;
  45.     for(int i=0;i<m;++i){
  46.         scanf("%d%d",&u,&v);
  47.         if(u>v){
  48.             int temp;
  49.             temp=u;
  50.             u=v;
  51.             v=temp;
  52.         }
  53.         fight(u,v);
  54.     }
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement