Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdio.h>
- using namespace std;
- int parent[100010];
- int r[100010];
- int findgeneral(int u){
- if(parent[u]==u){
- return u;
- }
- return parent[u] = findgeneral(parent[u]);
- }
- void fight(int u, int v){
- u=findgeneral(u);
- v=findgeneral(v);
- if(u==v){
- printf("-1\n");
- return ;
- }
- if(r[v]>r[u]){
- r[v]+=r[u]/2;
- printf("%d\n",v);
- parent[u]=v;
- }
- else{
- r[u]+=r[v]/2;
- printf("%d\n",u);
- parent[v]=u;
- }
- }
- int main(){
- int n ,m;
- scanf("%d%d",&n,&m);
- for(int i=1;i<=n;++i){
- parent[i]=i;
- scanf("%d",&r[i]);
- }
- int u,v;
- for(int i=0;i<m;++i){
- scanf("%d%d",&u,&v);
- if(u>v){
- int temp;
- temp=u;
- u=v;
- v=temp;
- }
- fight(u,v);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement