2018.09.16 loj#10243. 移棋子游戏(博弈论)
传送门
题目中已经给好了sg图,直接在上面跑出sg函数即可。
最后看给定点的sg值异或和是否等于0就判好了。
代码:
#include<bits/stdc++.h>
#define N 2005
#define M 6005
using namespace std;
int n,m,k,sg[N],first[N],First[N],du[N],cnt=0,ans=0;
bool vis[N];
queue<int>q;
struct edge{int v,next;}e[M],E[M];
inline void add(int u,int v){
e[++cnt].v=v,e[cnt].next=first[u],first[u]=cnt;
E[cnt].v=u,E[cnt].next=First[v],First[v]=cnt;
}
inline int max(int a,int b){return a>b?a:b;}
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
int main(){
n=read(),m=read(),k=read();
for(int i=1;i<=m;++i){
int a=read(),b=read();
add(a,b),++du[a];
}
for(int i=1;i<=n;++i)if(!du[i])q.push(i);
while(!q.empty()){
int x=q.front(),tmp=0;
q.pop();
for(int i=first[x];i;i=e[i].next){
int v=e[i].v;
vis[sg[v]]=1,tmp=max(tmp,sg[v]);
}
for(int i=0;i<=tmp+1;++i)if(!vis[i]){sg[x]=i;break;}
for(int i=0;i<=tmp;++i)vis[i]=0;
for(int i=First[x];i;i=E[i].next){
int v=E[i].v;
--du[v];
if(!du[v])q.push(v);
}
}
for(int i=1;i<=k;++i)ans^=sg[read()];
printf("%s",ans?"win":"lose");
return 0;
}
2018.09.16 loj#10243. 移棋子游戏(博弈论)的更多相关文章
- 2018.09.16 loj#10242. 取石子游戏 2(博弈论)
传送门 同样有一个显然的结论. 如果a1a_1a1 xorxorxor a2a_2a2 xorxorxor a3a_3a3 xor...xor...xor... xorxorxor ana_na ...
- 2018.09.16 loj#10241. 取石子游戏 1(博弈论)
传送门 好像是某年的初赛题啊. 有个很显然的结论. 当n" role="presentation" style="position: relative;&quo ...
- 2018.09.07 loj#10166 数字游戏(数位dp)
传送门 数位dp板子题. f[i][mod]" role="presentation" style="position: relative;"> ...
- 2018.09.16 codeforces1041C. Coffee Break(双端队列)
传送门 真心sb题啊. 考场上最开始看成了一道写过的原题... 仔细想了一会发现看错了. 其实就是一个sb队列. 每次插入到队首去就行了. 代码: #include<bits/stdc++.h& ...
- 2018.09.16 bzoj3757: 苹果树(树上莫队)
传送门 一道树上莫队. 先用跟bzoj1086一样的方法给树分块. 分完之后就可以莫队了. 但是两个询问之间如何转移呢? 感觉很难受啊. 我们定义S(u,v)" role="pre ...
- 2018.09.16 bzoj1086: [SCOI2005]王室联邦(贪心)
传送门 就是给树分块. 对于一个节点. 如果它的几棵子树加起来超过了下限,就把它们分成一块. 这样每次可能会剩下几个节点. 把它们都加入栈中最顶上那一块就行了. 代码: #include<bit ...
- 2018.09.16 atcoder Garbage Collector(贪心)
传送门 昨晚打比赛的时候不是很机智啊. 这道题贪心就能过了. 我们可以发现一个明显的结论,每次选的垃圾的距离从大到小排序之后,每个距离对答案的贡献的系数是5,5,7,9,11-也就是最远的是5,其余都 ...
- 2018.09.16 bzoj1176: [Balkan2007]Mokia(cdq分治)
传送门 调了半天发现是输出优化打错了求心理阴影体积233 这题很简单啊. 一个修改操作x如果对一个询问操作y有贡献那么有. tx<ty,Xx<=Xy,Yx<=Yy" rol ...
- 2018.09.16 spoj104Highways (矩阵树定理)
传送门 第一次写矩阵树定理. 就是度数矩阵减去邻接矩阵之后得到的基尔霍夫矩阵的余子式的行列式值. 这个可以用高斯消元O(n3)" role="presentation" ...
随机推荐
- C# 生成word文档(NPOI)
using NPOI.XWPF.UserModel XWPFDocument doc = new XWPFDocument(); //创建新的word文档 XWPFParagraph p1 = doc ...
- leetcode500
public class Solution { public string[] FindWords(string[] words) { var list1 = new List<char> ...
- sitemap
sitemap对于网站就像是字典的索引目录,而这个目录的读者则是搜索引擎的爬虫.网站有了sitemap,有助于搜索引擎“了解”网站,这样会有助于站点的内容被收录. sitemap是一个由google主 ...
- 使用MATPLOTLIB 制图(散点图,热力图)
import numpy as np import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('D:\\myfil ...
- 更新403 Forbidden
用TidHTTP下载一个文件 http://192.168.1.1/files/新建文本文档.txt 报错,但是用浏览器打开正常 HTTP/1.1 403 Forbidden 最后不是程序的问题,把i ...
- 基于OpenGL编写一个简易的2D渲染框架-04 绘制图片
阅读文章前需要了解的知识,纹理:https://learnopengl-cn.github.io/01%20Getting%20started/06%20Textures/ 过程简述:利用 FreeI ...
- focusin 事件| focusout事件
focusin 定义和用法 当元素(或在其内的任意元素)获得焦点时发生 focusin 事件. 当在元素或在其内的任意元素上发生 focus 事件时,focusin() 方法添加要运行的函数. 与 f ...
- ubuntu sudo apt-get upgrade 和 sudo apt-get dist-upgrade区别
sudo apt-get upgrade: 不会对系统产生重大的影响,可以在任何时候运行. sudo apt-get dist-upgrade: 涉及核心的升级,通常会对系统功能产生实际的影响,可能在 ...
- 关于gevent的一些理解(二)
3 实际应用 1 zeromq和gevent: zeromq的介绍请参看:http://www.infoq.com/cn/news/2010/09/introduction-zero-mq 假设你已经 ...
- Ansible test
[root@localmesos ansible_test]# ansible all -a "/bin/echo hello"192.168.111.111 | SUCCESS ...