HDU
来源:互联网 发布:淘宝魔切页面 编辑:程序博客网 时间:2024/06/05 19:42
题意:中文题。
思路:考虑和根相连的一条树链,如果这条树链上和根相连的那条边权值为1,那么最终在该链上的操作次数要为奇数次才能使得和根相连的边的权值变为0(因为不论选择该条树链上哪个点,此边的权值总会翻转),同理可得和根相连的边若初始权值为0要操作偶数次。而无论两个人怎么操作,都不会改变这些根的直连边变0所需操作次数的奇偶性,而若总操作次数为奇数次的话那就必定是先手胜了,因此我们只需维护一个每个点的直连边中权值为1的个数就行了。
代码:
#include<bits/stdc++.h>#define ll long long#define MAXN 50010#define inf 0x3f3f3f3fusing namespace std;typedef pair<int,int> P;map<P, int> edge;int degree[MAXN];int main(){int T, n, m, u, v, w, op;cin >> T;while(T--){scanf("%d %d", &n, &m);memset(degree, 0, sizeof(degree));edge.clear();for(int i = 1; i < n; i++){scanf("%d %d %d", &u, &v, &w);degree[u] += w;degree[v] += w;if(u > v) swap(u, v);edge[P(u, v)] = w;}while(m--){scanf("%d", &op);if(op) {scanf("%d %d %d", &u, &v, &w);if(u > v) swap(u, v);degree[u] -= edge[P(u, v)];degree[v] -= edge[P(u, v)];degree[u] += w; degree[v] += w;edge[P(u, v)] = w;} else {scanf("%d", &u);if(degree[u] & 1) puts("Girls win!");else puts("Boys win!");}}} return 0;}
阅读全文
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- JVM-运行时数据区域(2)
- 8、9、10月读书
- flume properties配置文件详解
- 学习数据结构——线性表与链表
- Eclipse快捷键(常用)
- HDU
- 第2章-从头开始:自然数 2.1-Peano 公理
- git常用命令学习笔记
- Kubernetes常用命令(kubectl)
- 九鼎之尊(一)(二)
- IDEA下maven工程的classpath
- EL JSTL
- RPC(Remote Procedure Call Protocol远程过程调用)
- Android Phone