cf1149E. Election Promises
题目描述
题解
有向无环图的博弈游戏有个小技巧就是把点分组,每个点 uuu 所在的集合 M(u)=mex{M(v)∣(u,v)∈G}M(u)=\text{mex}\{M(v)|(u,v)\in G\}M(u)=mex{M(v)∣(u,v)∈G}
然后如果每个组的异或值为 000 的话,那么就是先手必败,否则先手必胜。
因为我们可以考虑找到异或值不为 000 的最大编号的组,然后把其中一个数 xxx 减小至这个组异或值为 000 ,然后对于 xxx 的出边所指的点 vvv ,把 vvv 点改为使得其组异或值为 000 的值。这样就是每个组异或值都为 000 的情况了。因此先手必胜。
求 mex\text{mex}mex 只要 bfs\text{bfs}bfs 一遍就好了,效率: O(n+m)O(n+m)O(n+m) 。
代码
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,m,a[N],hd[N],V[N],nx[N],t,g[N],p[N],s[N],in[N];
vector<int>e[N];
queue<int>q;
void add(int u,int v){nx[++t]=hd[u];V[hd[u]=t]=v;
}
int main(){scanf("%d%d",&n,&m);for (int i=1;i<=n;i++)scanf("%d",&a[i]);for (int i=1,u,v;i<=m;i++)scanf("%d%d",&u,&v),add(v,u),in[u]++,e[u].push_back(v);for (int i=1;i<=n;i++)if (!in[i]) q.push(i);for (;!q.empty();){int u=q.front(),z;q.pop();for (int i=hd[u];i;i=nx[i])if (!(--in[V[i]])) q.push(V[i]);z=e[u].size();for (int i=0;i<z;i++) p[g[e[u][i]]]=u;for (int i=0;;i++) if (p[i]!=u){g[u]=i;s[i]^=a[u];break;}}for (int i=n;~i;i--){if (!s[i]) continue;puts("WIN");for (int j=1,z;j<=n;j++)if (g[j]==i && (s[i]^a[j])<a[j]){a[j]=(s[i]^a[j]);z=e[j].size();for (int v,k=0;k<z;k++)v=e[j][k],a[v]=s[g[v]]^a[v],s[g[v]]=0;break;}for (int j=1;j<=n;j++)printf("%d%c",a[j],j<n?' ':'\n');return 0;}puts("LOSE");return 0;
}
cf1149E. Election Promises相关推荐
- Codeforces Round #556 (Div. 1Div. 2)
Codeforces Round #556 (Div. 1&&Div. 2) 题号 题目 知识点 A Stock Arbitraging 贪心 B Tiling Challenge 贪 ...
- Codeforces Round #556 (Div. 1)
Codeforces Round #556 (Div. 1) A. Prefix Sum Primes 给你一堆1,2,你可以任意排序,要求你输出的数列的前缀和中质数个数最大. 发现只有\(2\)是偶 ...
- MIT 6.824 Lab2A (raft) -- Leader Election
文章目录 实验要求 Leader Election流程 及详细实现介绍 基本角色 关键超时变量 关键的两个RPC实现 RequestVote RPC AppendEntries RPC Go并发编程实 ...
- 1675: [Usaco2005 Feb]Rigging the Bovine Election 竞选划区(题解第二弹)
1675: [Usaco2005 Feb]Rigging the Bovine Election 竞选划区 Time Limit: 5 Sec Memory Limit: 64 MB Submit: ...
- 初识JavaScript Promises
JavaScript有很多槽点,嵌套回调怕是千夫所指. 很久之前,我一直使用async来处理JavaScript异步编程中的嵌套回调问题.当然我也大概的了解过一些其它旨在解决这些问题的类库,诸如Eve ...
- Generator + Promises, the best of all worlds in ES6
在之前的讨论中,我们展示了generator是如何的进行异步迭代的.这是建立在对杂乱无章的回调函数进行序列化的一次巨大的进步.但我们也失去了一些很重要的东西,也就是Promises的信任和组合.不要担 ...
- [异常笔记] zookeeper集群启动异常: Cannot open channel to 2 at election address ……
[异常笔记] zookeeper集群启动异常: Cannot open channel to 2 at election address -- 参考文章: (1)[异常笔记] zookeeper集群启 ...
- Apache ZooKeeper - Leader Election使用场景
文章目录 需求 Leader Election Case Code 源码分析 需求 Leader Election https://curator.apache.org/getting-started ...
- [译] 探究 Swift 中的 Futures Promises
本文讲的是[译] 探究 Swift 中的 Futures & Promises, 原文地址:Under the hood of Futures & Promises in Swift ...
最新文章
- js 自动关闭html页面,JS关闭窗口或JS关闭页面的几种代码分享
- Idea 七步建立Spring Mvc 的web项目,极其简单
- python如何播放视频_如何用python做一个视频搜索+播放器
- Best Time to Buy and Sell Stock(动态规划)
- 购买腾讯云主机后的快速配置
- VIP - virtual IP address
- 英伟达2022财年第二季度获得创纪录营收65.1亿美元
- 易语言服务端与客户端怎么传送_配置中心是怎么推送的?动手实现一个 Long Polling 长轮询...
- 面试题 35 : 复杂链表的复制
- Ubuntu: Ubuntu中安装使用Source Inside 3.5
- 世界上最有能量的语言,一定要经常说!
- paip.获取当前实际北京时间API
- linux可执行文件bad interpreter解决方法
- 计算机二级wpsoffice知识点,2017全国计算机等级考试一级WPS office考试大纲
- 紫罗兰永恒花园rust简谱_Letter《紫罗兰永恒花园》4.5话ED 简谱
- 个人外汇买卖能不能一直等到赢利再平仓
- HoloLens开发的需求与标准总结
- OMAP 3 图像信号处理器 (ISP) 驱动
- 笔记本如何查看电池寿命? CMD 指令
- 基于Linux下的VIC使用(2)Routing部分(Fortran版本)