[codeforces] Gym - 101246D Fire in the Country (BFS + 基础博弈)
2017-08-09 15:38
441 查看
[codeforces] Gym - 101246D Fire in the Country (BFS + 基础博弈)
题目链接: D. Fire in the Country题目大意:
给定n个点,m条边, 有一个机器人, 初始在一个号点, 两个人轮流操作, 每次可以让机器人走到一个相邻的点, 大火从一号点开始蔓延, 每次所有着火点相连的点都会被点着, 问最终谁让机器人走到着火点谁就输。
解题思路: 题意有点绕, 我们简化一下, 就是两个人轮流控制一个机器人走,从一号点, 不能往回走(因为后面的点走完之后就会着火), 那么谁站在叶子节点谁就输了。
举例子: 就1,2两个点, A让机器人从1走到2, 轮到B的时候, B走不动了, 然后大火会蔓延到2, 那么B就输了。(不理解的话自己随便画一个树推一下) 所以说, 叶子节点是必败点。
这时候需要知道博弈那基本的两句话:
一个点是必胜点当且仅当至少有一个后继点是必败点
一个点是必败点当且仅当所有的后继状态都是必胜点
所以只要跑一遍BFS, 之后从后往前推, 就可以知道每一个点是必胜还是必败了。
注意点: 用一个需要注意的是有可能会有同层的边, 这条边是没有用的边, 只有dis比当前点深的点才是他的后继点。
/********************************************** *Author* :ZZZZone *reated Time* : 2017/8/7 21:00:51 *ended Time* : 2017/8/7 21:13:27 *********************************************/ #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <string> #include <cmath> #include <cstdlib> #include <ctime> #include <stack> using namespace std; typedef pair<int, int> PII; typedef long long LL; typedef unsigned long long ULL; const int MaxN = 1000; vector<int> edge[MaxN + 5]; int q[MaxN + 5], dis[MaxN + 5]; bool f[MaxN + 5]; int n, m; void bfs(){ int head = 1, tial = 0; dis[1] = 1; q[++tial] = 1; while(head <= tial){ int u = q[head]; for(int i = 0; i < edge[u].size(); i++){ int v = edge[u][i]; if(!dis[v]){ dis[v] = dis[u] + 1; q[++tial] = v; } } head++; } for(int i = tial; i >= 1; i--){ int u = q[i]; for(int j = 0; j < edge[u].size(); j++){ int v = edge[u][j]; if(dis[v] > dis[u] && ! f[v]) f[u] = true; } } } int main() { freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); while(~scanf("%d %d", &n, &m)){ for(int i = 1; i <= m; i++){ int u, v; scanf("%d %d", &u, &v); edge[u].push_back(v); edge[v].push_back(u); } bfs(); if(f[1]) printf("Vladimir\n"); else printf("Nikolay\n"); memset(f, 0, sizeof(f)); memset(dis, -1, sizeof(dis)); memset(edge, 0, sizeof(edge)); } return 0; }
相关文章推荐
- [codeforces] Gym - 100814D Frozen Rivers (BFS + 二分)
- codeforces 399 E. Game of Stones 博弈 思维题
- 博弈问题之三种基础博弈小结
- Codeforces 15C Industrial Nim(Nim博弈)
- 2012蓝桥杯 取球博弈 基础博弈论
- [codeforces] Gym - 101246G Revolutionary Roads (DFS)
- codeforces基础题——#356(div2) C
- 基础博弈专题
- Codeforces Gym 100379L Game with a string 博弈+交互题
- CodeForces-2015 HIAST Collegiate Programming Contest-Gym-100952A-Who is the winner?
- codeforces 213C Relay Race(DP基础,棋盘路径)
- HDU_2149_基础博弈sg函数
- Codeforces_388C_Fox and Card Game(博弈、贪心、排序)
- hdu 1847 Good Luck in CET-4 Everybody!(基础博弈)
- Gym - 100676E —— 基础题
- Codeforces 610B Vika and Squares 【计数 数学基础】
- Codeforces-GYM-100726F
- Codeforces - Gym - 100187J. Deck Shuffling - dfs
- Codeforces - Gym - 101161 - E - Tax (主席树)
- CodeForces 69D Dot (博弈+记忆化)