2016ccpc合肥 C - 朋友 [HDU - 5963]

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z591826160/article/details/83268039

C - 朋友 [HDU - 5963]

题面

在这里插入图片描述

思路

开题之后看到n,m很大,直接考虑必胜局面

经过一番推倒推导后发现貌似一条链上如果出现了离根距离为1开始的一段1区间,Girls在这条链上是必胜的,剩下只需考虑这样1区间的个数。

(推导的时候还是要注意排版格式啊,写整齐各种条件和结果,中途因为看不清中间结果,重新推了2,3次,浪费了很多时间,接锅

代码

vector<pair<int,int> >G[maxn];
int main(){
    int t;
    rd(t);
    while(t--){
        int n,m;
        rd(n,m);
        rep(i,1,n){
            int a,b,c;
            rd(a,b,c);
            G[a].pb(mp(b,c));
            G[b].pb(mp(a,c));
        }
        while(m--){
            int op;
            rd(op);
            if(op){
                int a,b,c;
                rd(a,b,c);
                rep(i,0,G[a].size())
                    if(G[a][i].fi==b)
                        G[a][i]=mp(b,c);
                rep(i,0,G[b].size())
                    if(G[b][i].fi==a)
                        G[b][i]=mp(a,c);
            } else {
                int ans=0;
                int a;
                rd(a);
                rep(i,0,G[a].size())
                    ans+=G[a][i].se;
                if(ans&1)
                    puts("Girls win!");
                else 
                    puts("Boys win!");
            }
        }
        rep(i,0,n+1)
            G[i].clear();
    }
}

猜你喜欢

转载自blog.csdn.net/z591826160/article/details/83268039