【NOI2011】兔兔与蛋蛋的游戏【二分图博弈】

传送门

结论 不会有同一个棋子移动两次

反证法,对于第一个移动第二次的棋子

设两次移动之间(含)的移动的棋子为A1,A2,A3,……,AnA_1,A_2,A_3,……,A_nA1,A2,A3,An(指棋子本身而非位置)

因为最后移回来了,所以往上和往下、往左和往右次数相同

所以nnn是偶数 然后A1A_1A1AnA_nAn颜色不同

但这个棋子开始被移到当前位置,最后被移走,所以A1=AnA_1=A_nA1=An,矛盾

所以移动路径没有交

既然这样,我们就不用考虑棋盘具体的变化,而看成空格交替走两个颜色

然后和上一道题就一样了

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#define MAXN 2005
#define MAXM 10005
using namespace std;
struct edge{int u,v;}e[MAXM];
int head[MAXN],nxt[MAXM],cnt;
void addnode(int u,int v)
{e[++cnt]=(edge){u,v};nxt[cnt]=head[u];head[u]=cnt;
}
int n,m;
#define id(x,y) (((x)-1)*m+(y))
char s[50][50];
const int dx[]={-1,1,0,0},dy[]={0,0,-1,1};
bool del[MAXN];
int link[MAXN],used[MAXN];
bool find(int u)
{for (int i=head[u];i;i=nxt[i])if (!used[e[i].v]&&!del[e[i].v]){used[e[i].v]=1;if (!del[link[e[i].v]]&&(!link[e[i].v]||find(link[e[i].v]))){link[u]=e[i].v,link[e[i].v]=u;return true;}}return false;
}
int calc()
{memset(link,0,sizeof(link));int ans=0;for (int x=1;x<=n;x++)for (int y=1;y<=m;y++)if (s[x][y]!='O'&&!del[id(x,y)])memset(used,0,sizeof(used)),ans+=find(id(x,y));return ans;
}
bool win[MAXN];
int main()
{scanf("%d%d",&n,&m);for (int i=1;i<=n;i++) scanf("%s",s[i]+1);int st;for (int x=1;x<=n;x++)for (int y=1;y<=m;y++)if (s[x][y]!='O'){for (int i=0;i<4;i++)if (s[x+dx[i]][y+dy[i]]=='O')addnode(id(x,y),id(x+dx[i],y+dy[i]));if (s[x][y]=='.') st=id(x,y);}int k,tot=0;scanf("%d",&k);int mmat=calc();for (int i=1;i<=2*k;i++){del[st]=1;int t=calc();if (mmat!=t) win[i]=1;mmat=t;int x,y;scanf("%d%d",&x,&y);st=id(x,y);}for (int i=1;i<=k;i++) if (win[2*i-1]&&win[2*i]) ++tot;printf("%d\n",tot);for (int i=1;i<=k;i++) if (win[2*i-1]&&win[2*i]) printf("%d\n",i); return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CF1528C dfs序+set维护

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你两棵有nnn个节点的树&#xff0c;我门记第一棵为aaa&#xff0c;第二棵为bbb&#xff0c;现在你有一个nnn个点都孤立的点集&#xff0c;两个点u,vu,vu,v可以连边当且仅当这两个点在aaa树中一个是另一个的…

纠正一个错误,分布式系统关注点第17篇

这里是Z哥的个人公众号每周五早8点 按时送达当然了&#xff0c;也会时不时加个餐&#xff5e;我的第「78」篇原创敬上今天来加个餐&#xff0c;紧急纠正一个错误。先和大家说一声抱歉&#xff1a;D昨晚睡觉前&#xff0c;惯例打开「订阅号助手」回复一些留言。有一位小伙伴提了…

【NOI2016】国王饮水记【贪心】【斜率优化】【决策单调性】

传送门 首先比h1h_1h1​小的肯定没用&#xff0c;直接无视 然后考虑合并的顺序 ①在无限制的情况下&#xff0c;合并多个不如一个一个合并 a<b<ca<b<ca<b<c时&#xff0c;ab2c2>abc3{{ab \over 2}c\over 2}>{{abc}\over 3}22ab​c​>3abc​ ②先…

CF946D Timetable 背包dp + 思维转换

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; n,m,k≤500n,m,k\le500n,m,k≤500 思路&#xff1a; 将其转换成背包的模型&#xff0c;就可以想出来一个很明显的dpdpdp状态&#xff1a;f[i][j]f[i][j]f[i][j]表示前iii行花费了jjj的最小代价&#xff0c;…

.NET开发框架(三)-高可用服务器端设计

我们对框架功能作了简述&#xff0c;演示视频请点击 这里查看 &#xff0c;本章节&#xff0c;我们专门讲解一下&#xff0c;如何在Window服务器下&#xff0c;设计高可用的框架。我们的框架设计采用的是Window版本的服务端设计&#xff1a;整体框架图如下&#xff0c;为什么我…

P1537 弹珠 背包可行性dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 疯狂水文章。 这个很明显是个背包&#xff0c;我们开一个布尔数组&#xff0c;之后枚举每组的个数&#xff0c;让后枚举1−61-61−6&#xff0c;再枚举容量kkk&#xff0c;注意顺序不能错了…

【NOI2012】骑行川藏【拉格朗日乘数法】【二分套二分】

传送门 拉格朗日乘数法裸题 限制 f({v})∑i1nkisi(vi−vi′)EUf(\{v\})\sum_{i1}^nk_is_i(v_i-v_i)E_Uf({v})i1∑n​ki​si​(vi​−vi′​)EU​ 求 g({v})∑i1nsivig(\{v\})\sum_{i1}^n\frac{s_i}{v_i}g({v})i1∑n​vi​si​​ 最小值 设 L(λ,{v})g({v})λ[f({v})−EU]∑…

.NET Core 3.0中的WinForms创建集中式拉取请求中心

Windows 窗体&#xff08;或简称 WinForms&#xff09;&#xff0c;多年来被用于开发具有丰富和交互式界面的基于 Windows 的强大应用程序。各类企业对这些桌面应用程序的投入量非常巨大&#xff0c;每月有大约 240 万开发人员使用 Visual Studio 创建桌面式应用。利用和扩展现…

CF296B dp\容斥

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; n≤1e5n\le1e5n≤1e5 思路&#xff1a; 求方案数基本就是考虑dpdpdp了&#xff0c;看到nnn这么大可以考虑一下分情况讨论的dpdpdp状态。 设f[i][j]f[i][j]f[i][j]表示到了第iii个&#xff0c;状态为jjj的方…

min_25筛详解

扯淡 min_25筛是由min_25提出的求积性函数前缀和的亚线性算法&#xff0c;和一个叫“扩展埃氏筛”的东西有着微妙的关系。 至于是什么关系&#xff0c;我也不太清楚&#xff0c;反正有人说很像有人说就是一个东西&#xff08;雾&#xff09; 这段话并不是废话 约定 为了方…

asp.net core 自定义异常处理中间件

Intro在 asp.net core 中全局异常处理&#xff0c;有时候可能不能满足我们的需要&#xff0c;可能就需要自己自定义一个中间件处理了&#xff0c;最近遇到一个问题&#xff0c;有一些异常&#xff0c;不希望记录错误日志&#xff0c;目前主要是用户请求取消导致的 TaskCanceled…

CF786B Legacy 线段树优化建图

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 实现如下连边后跑最短路。 思路&#xff1a; 优化建图板子题&#xff0c;优化思路就是将区间分割成若干个线段树上的线段&#xff0c;与线段树分治有点类似&#xff0c;由于有点向区间也有区间向点的边&a…

【ZJOI2015】幻想乡 Wi-Fi 搭建计划【几何】【贪心】【dp】

传送门 题意&#xff1a;一个x∈(−∞,∞),y∈[0,R]x\in(-\infin,\infin),y\in[0,R]x∈(−∞,∞),y∈[0,R]的矩形中有nnn个点&#xff0c;矩形外有mmm个半径均为RRR的圆&#xff0c;有独立的代价cic_ici​。求覆盖最多的点所需的最小代价。 n,m≤100n,m\leq100n,m≤100 显然先…

.NET架构开发应知应会

.NET程序是基于.NET framework、.NET Core、Mono、UWP【.NET实现】开发和运行的 &#xff0c;定义以上【.NET实现】的标准规范称为.NET StandardL1&#xff1a;.NET Standard.NET标准是一组API集合&#xff0c;由上层三种【.NET实现】的Basic Class Library实现&#xff0c;更正…

几个冷门字符串算法的学习笔记(最小表示法,exKMP,Lyndon Word)

所有下标均从1开始 最小表示法 给定一个串&#xff0c;求字典序最小的循环同构。 我们把串复制一遍接在后面&#xff0c;然后求出[1,N][1,N][1,N]开始的长为NNN的子串中最小的 先设i1,j2i1,j2i1,j2 然后暴力找出iii和jjj往后匹配的第一个不同的位置&#xff0c;记为ikikik…

P6348 [PA2011]Journeys 线段树优化建图 区间连区间

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 每次连接[a,b][a,b][a,b]与[c,d][c,d][c,d]之间所有点&#xff0c;让后跑最短路。 思路&#xff1a; 比普通的优化建图能简单点&#xff0c;我们只需要加两个虚点之间边权为111&#xff0c;让后让某个点连…

.NET Core IdentityServer4实战 第Ⅴ章-单点登录

OiDc可以说是OAuth的改造版&#xff0c;在最初的OAuth中&#xff0c;我们需要先请求一下认证服务器获取下Access_token&#xff0c;然后根据Access_token去Get资源服务器, 况且OAuth1 和 2 完全不兼容&#xff0c;易用性差&#xff0c;而OIDC可以在登陆的时候就把信息返回给你&…

【CF594E】Cutting the Line 【贪心】【Lyndon Word】【扩展kmp】

传送门 题意&#xff1a;给一个字符串SSS和正整数kkk&#xff0c;将SSS分成最多kkk段&#xff0c;每段不变或翻转&#xff0c;使得最后的字典序最小。 ∣S∣≤5106|S|\leq5\times10^6∣S∣≤5106 发现不翻转可以看成拆成若干单字符分别翻转&#xff0c;所以先分析一下必须翻转…

一份好的工作总结才能帮你升职加薪

这里是Z哥的个人公众号每周五早8点 按时送达当然了&#xff0c;也会时不时加个餐&#xff5e;我的第「79」篇原创敬上最近有点忙&#xff0c;搬出之前攒的一篇文章来应急一下。一篇能助你挣更多钱的文章。好了&#xff0c;下面开始。我的读者们大部分是互联网行业的&#xff0c…

CF1385E Directing Edges 拓扑序

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个图和若干个边&#xff0c;有些是有向边&#xff0c;有些是无向边&#xff0c;让你给无向边定向&#xff0c;使得最终的图是DAGDAGDAG。 思路&#xff1a; 题目让构造DAGDAGDAG&#xff0c;比较容易…