版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
}
}