-1出现问题
  • 板块P1456 Monkey King
  • 楼主Endt
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/5/3 17:41
  • 上次更新2023/10/28 02:17:25
查看原帖
-1出现问题
492662
Endt楼主2022/5/3 17:41
#include<bits/stdc++.h>

#define Int  long long int
#define usInt  unsigned Int
#define min(a,b)  (a<b?a:b)
#define max(a,b)  (a>b?a:b)

using std::cin;using std::cout;

int n,m;
class Monkey{
    public:
        int strength;
        Monkey* bro;Monkey* son;
        Monkey* boss;
        void half();
        Monkey* merge_bros();
        
    public:Monkey(){bro=nullptr,son=nullptr,boss=this;}
};
Monkey* s[100005];
Monkey* merge_Monkey(Monkey* a,Monkey* b);

int main(){
    while(scanf("%d",&n)!=EOF){
        for(int i=1;i<=n;++i){
            s[i]=new Monkey();
            scanf("%d",&(s[i]->strength));
        }
        scanf("%d",&m);
        for(int u,v;~--m;){
            scanf("%d%d",&u,&v);
            s[u]->half();s[v]->half();
            printf("%d\n",merge_Monkey(s[u],s[v])->strength);
        }
        for(int i=1;i<=n;++i){
            delete(s[i]);
        }
    }
    return 0;
}

Monkey* merge_Monkey(Monkey* a,Monkey* b){
    if(a!=nullptr)while(a!=a->boss)a=a->boss;if(b!=nullptr)while(b!=b->boss)b=b->boss;
    if(a==b){
        Monkey* o=new Monkey;
        o->strength=-1;
        return o;
    }
    if(a==nullptr)return b;
    if(b==nullptr)return a;
    if(a->strength<b->strength)std::swap(a,b);
    b->bro=a->son;
    a->son=b;
    b->boss=a;
    return a;
}
Monkey* Monkey::merge_bros(){
    this->boss=this;Monkey* a=this->bro;
    if(a==nullptr)return this;a->boss=a;Monkey* b=a->bro;
    this->bro=nullptr;a->bro=nullptr;
    this->boss=merge_Monkey(this,a)->boss;
    if(b!=nullptr)this->boss=merge_Monkey(this->boss,b->merge_bros())->boss;
    return this->boss;
}
void Monkey::half(){
    Monkey* bss=this->boss;
    while(bss!=bss->boss)bss=bss->boss;
    Monkey* t=bss->son;
    bss->son=nullptr;
    bss->strength/=2;
    if(t!=nullptr){
        bss->boss=merge_Monkey(bss,t->merge_bros())->boss;
    }
}

https://www.luogu.com.cn/record/75074100

2022/5/3 17:41
加载中...