DMOJ IOI '17 P3 - Toy Train【拓扑排序】
传送: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;
}
DMOJ IOI '17 P3 - Toy Train【拓扑排序】的更多相关文章
- 2021.07.17 题解 CF1385E Directing Edges(拓扑排序)
2021.07.17 题解 CF1385E Directing Edges(拓扑排序) CF1385E Directing Edges - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) ...
- ACM/ICPC 之 数据结构-邻接表+DP+队列+拓扑排序(TSH OJ-旅行商TSP)
做这道题感觉异常激动,因为在下第一次接触拓扑排序啊= =,而且看了看解释,猛然发现此题可以用DP优化,然后一次A掉所有样例,整个人激动坏了,哇咔咔咔咔咔咔咔~ 咔咔~哎呀,笑岔了- -|| 旅行商(T ...
- 拓扑排序 codevs 4040 cojs 438
codevs 4040 EZ系列之奖金 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题目描述 Description 由于无敌的WRN在2015年世界英 ...
- UVA196-Spreadsheet(拓扑排序)
Spreadsheet In 1979, Dan Bricklin and Bob Frankston wrote VisiCalc, the first spreadsheet applicatio ...
- 拓扑排序的 +Leapms 线性规划模型
知识点 拓扑排序 拓扑排序的+Leapms模型 无圈有向图 一个图G(V,E), 如果边有向且不存在回路,则为无圈有向图.在无圈有向图上可以定义拓扑排序.下图是一个无圈有向图的例子. 拓扑排序 给定一 ...
- 拓扑排序(Topological Sorting)
一.什么是拓扑排序 在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列.且该序列必须满足下面两个 ...
- 【拓扑排序】烦人的幻灯片(slides)
1395:烦人的幻灯片(slides) 时间限制: 1000 ms 内存限制: 65536 KB提交数: 753 通过数: 416 [题目描述] 李教授将于今天下午作一次非常重 ...
- AOV网与拓扑排序
在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,我们称之为AOV网(Activity on Vextex Network).AOV网中的弧表示活动 ...
- 拓扑排序(Topological Order)UVa10305 Ordering Tasks
2016/5/19 17:39:07 拓扑排序,是对有向无环图(Directed Acylic Graph , DAG )进行的一种操作,这种操作是将DAG中的所有顶点排成一个线性序列,使得图中的任意 ...
随机推荐
- ESXi 5.5 RTL9168E网卡驱动 找到网卡
如果你对专业服务器的价格望而却步,恰巧又想在普通的PC上安装ESXi,恰巧又是ESXi 5.5版本,那么这篇文章中提及的问题你可能会遇到,并能给你提供一些帮助. 1.成功安装重启以后提示“no boo ...
- 初识代码封装工具SWIG(回调Python函数)
这不是我最早使用swig了,之前在写Kynetix的时候就使用了swig为python封装了C语言写的扩展模块.但是当时我对C++还不是很了解,对其中的一些概念也只是拿来直接用,没有理解到底是什么,为 ...
- linux jdk更换
有时候会发现,安装了新的jdk,而java -version 之后发现仍旧是旧的jdk,即使自己已经更新了JAVA_HOME的环境变量,解决方法如下: 具体如下: 1. 查看相应的jdk是否在 ubu ...
- UVA1025 A Spy in the Metro —— DP
题目链接: https://vjudge.net/problem/UVA-1025 题解: 详情请看紫书P267. 与其说是DP题,我觉得更像是模拟题,特别是用记忆化搜索写. 递推: #include ...
- CentOS软件管理之源代码以及RPM软件包管理
在Linux系统下,对于软件包的管理有多种机制,有源代码方式.RPM软件包管理方式以及YUM软件管理方式,本篇随笔将详细讲解CentOS下源代码形式安装软件以及RPM软件包管理机制 一.源代码形式 首 ...
- HTML,CSS 无边框桌面窗口
1. [图片] htmlui.jpg 2. [代码]下面源码复制到快手(WWW.AAU.CN)中运行即可 import win.ui;/*DSG{{*/var winform = ..win ...
- zoj 2315 New Year Bonus Grant 解题报告
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1315 题目意思:Bill Hates 是公司的老总,她管辖着很多程序 ...
- CISCO-路由器交换机IOS被删,恢复方法
方式一,tftpdnld方式恢复Router 2600 IOS 1) 将计算机串口和路由器console口相连 一定将计算机网口与路由器第一个以太口f0/0相连. 2) 启动TFTP服务器,并将要下载 ...
- 修改SO
1.如果在jni中定义的是int型的数据,比如: JNIEXPORT jint JNICALL Java_com_ggndktest1_JniGg_getCoin (JNIEnv * env, job ...
- Java笔记(四)
13. 集合框架: 集合中存储的都是对象的引用(地址) 迭代器:集合的取出元素的方式 import java.util.ArrayList; import java.util.Iterator; pu ...