题目描述

题解

有向无环图的博弈游戏有个小技巧就是把点分组,每个点 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相关推荐

  1. Codeforces Round #556 (Div. 1Div. 2)

    Codeforces Round #556 (Div. 1&&Div. 2) 题号 题目 知识点 A Stock Arbitraging 贪心 B Tiling Challenge 贪 ...

  2. Codeforces Round #556 (Div. 1)

    Codeforces Round #556 (Div. 1) A. Prefix Sum Primes 给你一堆1,2,你可以任意排序,要求你输出的数列的前缀和中质数个数最大. 发现只有\(2\)是偶 ...

  3. MIT 6.824 Lab2A (raft) -- Leader Election

    文章目录 实验要求 Leader Election流程 及详细实现介绍 基本角色 关键超时变量 关键的两个RPC实现 RequestVote RPC AppendEntries RPC Go并发编程实 ...

  4. 1675: [Usaco2005 Feb]Rigging the Bovine Election 竞选划区(题解第二弹)

    1675: [Usaco2005 Feb]Rigging the Bovine Election 竞选划区 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: ...

  5. 初识JavaScript Promises

    JavaScript有很多槽点,嵌套回调怕是千夫所指. 很久之前,我一直使用async来处理JavaScript异步编程中的嵌套回调问题.当然我也大概的了解过一些其它旨在解决这些问题的类库,诸如Eve ...

  6. Generator + Promises, the best of all worlds in ES6

    在之前的讨论中,我们展示了generator是如何的进行异步迭代的.这是建立在对杂乱无章的回调函数进行序列化的一次巨大的进步.但我们也失去了一些很重要的东西,也就是Promises的信任和组合.不要担 ...

  7. [异常笔记] zookeeper集群启动异常: Cannot open channel to 2 at election address ……

    [异常笔记] zookeeper集群启动异常: Cannot open channel to 2 at election address -- 参考文章: (1)[异常笔记] zookeeper集群启 ...

  8. Apache ZooKeeper - Leader Election使用场景

    文章目录 需求 Leader Election Case Code 源码分析 需求 Leader Election https://curator.apache.org/getting-started ...

  9. [译] 探究 Swift 中的 Futures Promises

    本文讲的是[译] 探究 Swift 中的 Futures & Promises, 原文地址:Under the hood of Futures & Promises in Swift ...

最新文章

  1. js 自动关闭html页面,JS关闭窗口或JS关闭页面的几种代码分享
  2. Idea 七步建立Spring Mvc 的web项目,极其简单
  3. python如何播放视频_如何用python做一个视频搜索+播放器
  4. Best Time to Buy and Sell Stock(动态规划)
  5. 购买腾讯云主机后的快速配置
  6. VIP - virtual IP address
  7. 英伟达2022财年第二季度获得创纪录营收65.1亿美元
  8. 易语言服务端与客户端怎么传送_配置中心是怎么推送的?动手实现一个 Long Polling 长轮询...
  9. 面试题 35 : 复杂链表的复制
  10. Ubuntu: Ubuntu中安装使用Source Inside 3.5
  11. 世界上最有能量的语言,一定要经常说!
  12. paip.获取当前实际北京时间API
  13. linux可执行文件bad interpreter解决方法
  14. 计算机二级wpsoffice知识点,2017全国计算机等级考试一级WPS office考试大纲
  15. 紫罗兰永恒花园rust简谱_Letter《紫罗兰永恒花园》4.5话ED 简谱
  16. 个人外汇买卖能不能一直等到赢利再平仓
  17. HoloLens开发的需求与标准总结
  18. OMAP 3 图像信号处理器 (ISP) 驱动
  19. 笔记本如何查看电池寿命? CMD 指令
  20. 基于Linux下的VIC使用(2)Routing部分(Fortran版本)

热门文章

  1. 如何配置本地yum源
  2. POS基本算法详细解析
  3. pos机linux下的对应程序
  4. 基于MATLAB对系统的串联滞后校正
  5. 葡萄牙晋级世界杯决赛
  6. 自动驾驶(七)---------初探轨迹规划
  7. 【数据结构】Java版
  8. 机器学习cae_智铸超云——适创科技为压铸企业量身定制的专业CAE云平台
  9. Hadoop新手学习指导
  10. (47)【漏洞发现】漏扫工具合集、WAF绕过分类