HDU 5963 博弈

Posted 不知姓名的黑猫君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 5963 博弈相关的知识,希望对你有一定的参考价值。

http://acm.hdu.edu.cn/showproblem.php?pid=5963

题目大意:中文题

思路:看ICPC camp好了,简单易懂:https://async.icpc-camp.org/d/628-2016     上面的C题

//看看会不会爆int!数组会不会少了一维!
//取物问题一定要小心先手胜利的条件
#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker,"/STACK:102400000,102400000")
#define LL long long
#define ALL(a) a.begin(), a.end()
#define pb push_back
#define mk make_pair
#define fi first
#define se second
#define haha printf("haha\\n")
const int maxn = 40000 + 5;
struct Node{
    int to, val;
};
vector<Node> G[maxn];
int n, m;
int ans[maxn];

int main(){
    int t; cin >> t;
    while (t--){
        scanf("%d%d", &n, &m);
        for (int i = 1; i <= n; i++) G[i].clear();
        for (int i = 1; i < n; i++){
            int u, v, val;
            scanf("%d%d%d", &u, &v, &val);
            G[u].pb(Node{v, val}); G[v].pb(Node{u, val});
        }
        memset(ans, 0, sizeof(ans));
        for (int i = 1; i <= n; i++){
            for (int j = 0; j < G[i].size(); j++){
                ans[i] += G[i][j].val;
            }
        }
        for (int i = 1; i <= m; i++){
            int ty; scanf("%d", &ty);
            if (ty == 0){
                int root; scanf("%d", &root);
                if (ans[root] % 2) printf("Girls win!\\n");
                else printf("Boys win!\\n");
            }
            else if (ty == 1){
                int u, v, val;
                scanf("%d%d%d", &u, &v, &val);
                for (int j = 0; j < G[u].size(); j++){
                    if (G[u][j].to == v){
                        if (val == G[u][j].val) break;
                        else {
                            G[u][j].val = val;
                            if (val == 1) ans[u]++, ans[v]++;
                            else ans[u]--, ans[v]--;
                        }
                    }
                }
                for (int j = 0; j < G[v].size(); j++){
                    if (G[v][j].to == u){
                        G[v][j].val = val;
                        break;
                    }
                }
            }
        }
    }
    return 0;
}
View Code

 

以上是关于HDU 5963 博弈的主要内容,如果未能解决你的问题,请参考以下文章

最简单的博弈论——HDU - 5963 朋友 (博弈)

HDU 5963 朋友 博弈论 (中国大学生程序设计竞赛(合肥))

HDU-5963 朋友 思维

[HDU5963]朋友

朋友HDU - 5963 (思维题) 三种方法

hdu 5963 朋友(2016ccpc 合肥站 C题)