传送:https://dmoj.ca/problem/ioi17p3

参考:https://blog.csdn.net/qq_27327327/article/details/80711824

妙啊……首先题意就是走到一个包含充电点的环里就能赢

因为出度至少是1,所以如果所有点都能到充电点那么全部是先手必胜;否则,不能到充点电的点以及一定能到这些点的点就一定是先手必败(能到的不是先手必胜,因为可能到了之后再出去进入别的环)

能到充点电的点是A支配并且能到至少一个充点电的点或B支配只能到充电点的点,每次求出这个集合,判断如果是全集就退出,否则用补集找到先手必败点删去,然后再对剩下不确定的点做上述操作即可

#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
const int N=5005;
int n,m;
vector<int>e[N],e2[N];
vector<int>wk(int fl,vector<int>a,vector<int>r,vector<int>b)
{
vector<int>ans(n),d(n);
queue<int>q;
for(int i=0;i<n;i++)
if(r[i]&&b[i])
q.push(i),ans[i]=1;
for(int i=0;i<n;i++)
for(int j=0;j<e[i].size();j++)
if(b[e[i][j]])
{
if(a[i]^fl)
d[i]++;
else
d[i]=1;
}
while(!q.empty())
{
int u=q.front();
q.pop();
for(int i=0;i<e2[u].size();i++)
if(!ans[e2[u][i]]&&b[e2[u][i]])
if(!(--d[e2[u][i]]))
{
ans[e2[u][i]]=1;
q.push(e2[u][i]);
}
}
return ans;
}
vector<int> who_wins(vector<int>a,vector<int>r,vector<int>u,vector<int>v)
{
n=a.size(),m=u.size();
for(int i=0;i<m;i++)
e[u[i]].push_back(v[i]),e2[v[i]].push_back(u[i]);
vector<int>ans(n);
for(int i=0;i<n;i++)
ans[i]=1;
while(1)
{
int fl=1;
vector<int>b1=wk(1,a,r,ans);
for(int i=0;i<n;i++)
if(ans[i]&&!b1[i])
fl=0;
if(fl)
return ans;
for(int i=0;i<n;i++)
b1[i]^=1;
vector<int>b2=wk(0,a,b1,ans);
for(int i=0;i<n;i++)
if(b2[i])
ans[i]=0;
}
return ans;
}

最新文章

  1. iOS - iOS 应用
  2. yii框架详解 之 CActiveRecord
  3. 关于rand()与srand()函数
  4. Maven使用笔记,错误Failure to Transfer后处理
  5. bzoj 1012 [JSOI2008]最大数maxnumber
  6. arcmap+vs2010
  7. opencv学习笔记(02)——遍历图像(指针法)
  8. 有趣的win8进度条
  9. openstack名称发音收集
  10. [FZU1977] Pandora adventure
  11. TP5.0 PHPExcel 数据表格导出导入(引)
  12. 7个小技巧,解决eclipse卡顿问题
  13. C#事件の.net下的EventArgs和EventHandler
  14. jenkins 结合 jmeter 的报告篇
  15. 2--Python入门--Python数据集合类型--列表
  16. IE8中jQuery.load()加载页面不显示的原因
  17. JAVA 类和对象基础知识详解
  18. hdu 1116 敌兵布阵(树状数组区间求和)
  19. 【Spring】依赖注入 加载顺序
  20. hdu-1069(dp)

热门文章

  1. vs2005 未能完成操作。未指定的错误
  2. (转)c#(wince)中使用多线程访问winform中控件的问题
  3. 【BZOJ1064】[Noi2008]假面舞会 DFS树
  4. You&#39;re trying to decode an invalid JSON String JSON返回有解析问题
  5. asp.net 列表控件
  6. 九度OJ 1138:进制转换 (进制转换)
  7. Java Virtual Machine (JVM) objects 虚拟机实例的产生 退出 两种线程
  8. 局域网如何通过SSH连接虚拟机装的centOS系统
  9. 在图片上加字符-base64转图片-图片转base64
  10. Struts2中properties