洛谷P6560 [SBCOI2020] 时光的流逝
题意:
给定一个有向图(可能有环),给定起点和终点,两个人玩游戏,一人走一步,先到达终点的人赢或者先无法移动的人输
思路:
题解
因为是终点和叶子节点是必败态,这是确定的,因此我们可以倒着搞
建反图跑拓扑排序更新节点胜负态
存在环就很难搞,拓扑排序的时候是无法进入环的,那么环上的点就难以确定胜负态
更新思想有点类似于点权这个题
就是如果当前节点胜负态是确定的,就可以去更新其他节点,我们就把他 pushpushpush 到队列中,而不是按照拓扑排序的顺序来
这样环上的点也可以进行更新
更新规则:
如果一个节点的后继节点是必败点,那么它是必胜点
如果一个点的后继节点全是必胜点,那么它是必败点
code:

#include<bits/stdc++.h>
#define endl '\n'
#define ll long long
#define ull unsigned long long
#define ld long double
#define all(x) x.begin(), x.end()
#define mem(x, d) memset(x, d, sizeof(x))
#define eps 1e-6
using namespace std;
const int maxn = 2e6 + 9;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
ll n, m;
vector <int> e[maxn];
int in[maxn], deg[maxn], f[maxn];
int s, ed;void topsort(){queue <int> q;for(int i = 1; i <= n; ++i) {in[i] = deg[i];if(!in[i] || i == ed) f[i] = -1, q.push(i);else f[i] = 0;}while(!q.empty()){int x = q.front();q.pop();for(int to : e[x]){if(f[to] != 0) continue;// 状态已经确定in[to]--;if(f[x] == -1) {// 因为是反图,x是必败的,那么to一定是必胜的 f[to] = 1;q.push(to);} else if(!in[to]){// 反图,入度为0,to的后继节点状态全部确定了,并且一定没有必败点,如果有必败点,那么在之前就to就会被更新为必胜点f[to] = -1;// to的后继节点x中全是必胜点,那么它就是必败点 q.push(to); }}}cout << f[s] << endl;
}
void work()
{int q;cin >> n >> m >> q;for(int i = 1; i <= m; ++i){int x, y;cin >> x >> y;e[y].push_back(x);deg[x]++;}while(q--){cin >> s >> ed;topsort();}
}int main()
{ios::sync_with_stdio(0);
//  int TT;cin>>TT;while(TT--)work();return 0;
}

P6560 [SBCOI2020] 时光的流逝 (博弈,反向建图,拓扑排序相关推荐

  1. 反向建图拓扑排序习题

    题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予1到N的顺序编号,预估质量最高的菜肴编号为1. 由于菜肴 ...

  2. pku 1691 Painting A Board DFS 抽象建图 + 拓扑排序

    http://poj.org/problem?id=1691 题意: 给定一个大矩形,然后给出n个需要染色的小矩形的左上角的坐标,右下角的坐标以及该矩形要染得颜色,每个颜色对应的一把刷子.问将这些小矩 ...

  3. 洛谷:P6560 [SBCOI2020] 时光的流逝(博弈、拓扑序列)

    时光流逝 题意: 博弈论经典操作,一人动一下,谁不能动就输了. 思路: 针对点,观察性质,找到必胜必败态. 如果此题给的的 DAG(无环),显然我们会很好做,无脑拓扑反推即可,但题目没保证. 如何处理 ...

  4. POJ-1122 FDNY to the Rescue!---Dijkstra+反向建图

    题目链接: https://vjudge.net/problem/POJ-1122 题目大意: 给出矩阵,矩阵中每个元素tij表示从第i个交叉路口到第j个交叉路口所需时间,若tij为-1则表示两交叉路 ...

  5. CF-346 D. Robot Control(反向建图spfa)

    CF-346 D. Robot Control(反向建图spfa) 题目链接 题意 有向图(有环)中有一个机器人,机器人有三种规则: 重复访问同一个点会自我销毁 无路可走会自我销毁 多岔路口会随机选择 ...

  6. Invitation Cards POJ - 1511 SPFA(dijkstra+反向建图+邻接表(下标过大)+输入输出用stdio(iostream超时))

    题目大意: 有编号1-P的站点, 有Q条公交车路线,公交车路线只从一个起点站直接 到达终点站,是单向的,每条路线有它自己的车费.有P个人早上从1出发 ,他们要到达每一个公交站点, 然后到了晚上再返回点 ...

  7. POJ 1511 Invitation Cards——Dijkstra优先队列优化+反向建图

    [题目描述] In the age of television, not many people attend theater performances. Antique Comedians of M ...

  8. AcWing 4246. 最短路径和(反向建图+链式前向星+堆优化)

    题目连接 https://www.acwing.com/problem/content/description/4249/ http://poj.org/problem?id=1511 思路 其实这道 ...

  9. cf1693C. Keshi in Search of AmShZ(div1)【最短路,反向建图】

    传送门 题意 在一个有向图上需要从点 111 到点 nnn,每次可以选择以下一种操作: 1.删除一条边 2.随机移动到当前点能够通向的另一点 求所需操作次数到达终点的最大值的最小值 看到求最大值的最小 ...

最新文章

  1. 以及其任何超类对此上下文都是未知的_ECCV'20 |OCRNet化解语义分割上下文信息缺失难题...
  2. php小程序地图处理,微信小程序 地图map详解及简单实例
  3. 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-数据库设计
  4. 51nod 1623 完美消除(数位DP)
  5. 01.神经网络和深度学习 W3.浅层神经网络(作业:带一个隐藏层的神经网络)
  6. python 制定识别图片的某些区域_python批量识别图片指定区域文字内容
  7. SQL查询-巧用记录数统计人数
  8. 用数据分析福尔摩斯探案集,里面有你不曾发现的秘密
  9. STM32解析SBUS信号例程详解
  10. 计算有向图可达矩阵Matlab实现
  11. 白化滤波器matlab程序,04实验四:白化滤波器的设计实验报告
  12. 论开展线上业务的纯粹度的重要性
  13. linux系统电视播放格式,OpenPCTV--支持电视的 Linux
  14. 个人或团队目标制定要点
  15. H - Unloaded Die
  16. java-net-php-python-ssm巴音学院本科部校园网站计算机毕业设计程序
  17. markdown组合数学公式
  18. 52.桌面上的IE图标不见了怎么办:
  19. 百度语音识别下载|百度语音识别demo_绿盟市场_绿色软件联盟
  20. 韦伯分布(威布尔分布,Weibull distribution)

热门文章

  1. 关于Adams驱动函数单位与符号d的问题
  2. WSL2跟踪 - 18945: 通过localhost直接访问 WSL2 容器中的服务
  3. dz每个php模板页文件,DZ模板discuz3.2仿魔客吧模板源码-包含DIY文件-价值450元DZ模板discuz3.2仿魔客吧模板...
  4. 如何传输利润中心主数据
  5. 香港星光大道1月底重开 料成旅客“打卡”热门地
  6. JZOJ1758. 过河
  7. 随手记_英语_学术写作_英文科技论文
  8. 计算机桌面显示变小,电脑屏幕变小怎么还原回来
  9. 手机“族群论”:十大族群背后的移动新世界
  10. 轻触开关实现自锁功能