码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 5963 博弈

时间:2016-11-07 12:10:39      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:pre   main   php   roo   memset   cin   print   hdu   log   

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 博弈

标签:pre   main   php   roo   memset   cin   print   hdu   log   

原文地址:http://www.cnblogs.com/heimao5027/p/6038059.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!