bzoj 1443 二分图博弈】的更多相关文章

这种两个人轮流走,不能走 走过的格子的大都是二分图博弈... #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define pii pair<int, int> #define y1 skldjfskldjg #define y2 skldfjsklejg using namespace std; + ; ; const int…
思路: 二分图博弈嘛 找到最大匹配的必须点 跑个网络流 前后DFS一遍 //By SiriusRen #include <queue> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; ,M=**,inf=0x3f3f3f3f; ],jy; ][],xx[]={,-,,},yy[]={,,,-}; struct Dinic{ int first[M],…
二分图博弈 from BZOJ 1443 游戏(二分图博弈) - free-loop - 博客园 定义 1.博弈者人数为两人,双方轮流进行决策. 2.博弈状态(对应点)可分为两类(状态空间可分为两个集合),对应二分图两边(X集和Y集).任意合法的决策(对应边)使状态从一类跳转到另一类.(正是由于这个性质使得问题可以用二分图描述) 3.不可以转移至已访问的状态.(不可重复访问点) 4.无法转移者判负. 判定 不妨设起点在二分图的X集中,那么先手只能从X集移动到Y集,后手只能从Y集移动到X集.一次游…
题意 题目链接 分析 二分图博弈经典模型,首先将棋盘二分图染色. 考虑在某个最大匹配中: 如果存在完美匹配则先手必败,因为先手选定的任何一个起点都在完美匹配中,而后手则只需要走这个点的匹配点,然后先手只能再找一个匹配点,所以先手必败. 从非匹配点出发先手必胜:后手只能走到匹配点(否则不是最大匹配),之后先手只需要一直走匹配边即可.从匹配点不可能走到非匹配点(否则存在增广路,与最大匹配矛盾),所以先手必胜. 记状态 1 表示一定在最大匹配中,0 表示不一定.我们发现只要一个点状态为 0,从这个点出…
题面 题面 题解 通过观察,我们可以发现如下性质: 可以看做是2个人在不断移动空格,只是2个人能移动的边不同 一个位置不会被重复经过 : 根据题目要求,因为是按黑白轮流走,所以不可能重复经过一个点,不然就变成一个人连续走2次了 原图是一个二分图 : 也是由按黑白轮流走这个要求得到的 因此我们对原图按照与原点的距离进行黑白染色,再跑二分图博弈即可. #include<bits/stdc++.h> using namespace std; #define R register int #defin…
题面 题面 题解 二分图博弈的模板题,只要会二分图博弈就可以做了,可以当做板子打. 根据二分图博弈,如果一个点x在某种方案中不属于最大匹配,那么这是一个先手必败点. 因为对方先手,因此我们就是要找这样一个点. 观察点x的性质,对于这样一个点x,我们一定可以找到一个点来代替它的位置,而什么样的点可以代替它呢? 从x出发,能够到达的未匹配同侧点可以,只需要交换匹配边即可. 因此做几遍dfs就可以了 #include<bits/stdc++.h> using namespace std; #defi…
bzoj 4131: 并行博弈 (parallel) Description lyp和ld在一个n*m的棋盘上玩翻转棋,游戏棋盘坐标假设为(x, y),1 ≤ x ≤ n,1 ≤ y ≤ m,这个游戏的游戏的的游戏规则如下: 每次可以操作坐标为 (x, y) 的棋子,要求棋子 (x, y) 必须是黑色,并且同时翻转所有棋子坐标 (x', y') 满足 x'≤x, y'≤y. lyp觉得这样还不够过瘾,于是乎他打算同时玩 k 个这样的游戏, 每次可以对其中某一个游戏进行操作,lyp先手,ld后手,…
bzoj 4025 二分图 [题目大意] 有n个点m条边,边会在start时刻出现在end时刻消失,求对于每一段时间,该图是不是一个二分图. 判断二分图的一个简单的方法:是否存在奇环 若存在奇环,就不是二分图. 假设加入一条u->v的边,u,v已经联通,怎么知道是否是一个奇环呢?只需要知道u,v之间的距离就行了.距离为偶数则是一个奇环. 路径?加边?删边? 很容易就想到是LCT. 维护u->v的距离. 每次加入一条边,就判断是否先前已经联通,否,则家父,若是,就判断u,v之间的距离. 假若已经…
传送门 Solution 补一篇二分图博弈 这个博客写的很详细qwq: https://www.cnblogs.com/maijing/p/4703094.html Code //By Menteur_Hxy #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> #define F(i,a,b) for(re…
[BZOJ 4025]二分图(线段树分治+带边权并查集) 题面 给出一个n个点m条边的图,每条边会在时间s到t出现,问每个时间的图是否为一个二分图 \(n,m,\max(t_i) \leq 10^5\) 分析 我们知道一个图是二分图的充要条件是图中不存在奇环.于是可以用边带权并查集维护两点间距离的奇偶性,每次加边的时候,如果新加入的边会产生一个偶环,那加不加这条边都不影响结果,直接跳过:如果加入的边会产生奇环,那么就更新答案. 考虑如何删除一条边.如果我们不路径压缩而是用按秩合并的话,那么可以通…
loj536「LibreOJ Round #6」花札(二分图博弈) loj 题解时间 很明显是二分图博弈. 以某个点为起点,先手必胜的充要条件是起点一定在最大匹配中. 判断方法是看起点到该点的边有流量且该点不在起点割集中. #include<bits/stdc++.h> using namespace std; typedef long long lint; struct pat{int x,y;pat(int x=0,int y=0):x(x),y(y){}bool operator<…
新知识get. 一类博弈问题,基于以下条件: 1.博弈者人数为两人,双方轮流进行决策.2.博弈状态(对应点)可分为两类(状态空间可分为两个集合),对应二分图两边(X集和Y集).任意合法的决策(对应边)使状态从一类跳转到另一类.(正是由于这个性质使得问题可以用二分图描述)3.不可以转移至已访问的状态.(不可重复访问点)4.无法转移者判负. 这类问题相当于从二分图指定起点开始轮流移动,不可重复访问点,无法移动判负 . 现在问题变为从二分图指定起点开始轮流移动,不可重复访问点,无法移动判负.不妨设起点…
题目链接 \(Description\) 一个\(N*M\)的有障碍的棋盘,先手放置棋子后,从后手开始轮流移动棋子,不能走重复的位置,不能移动的输.求在哪些位置放棋子是先手必胜的. \(Solution\) 依旧先黑白染色,移动棋子对应一个匹配. 那么原图有两种情况: 一是存在完美匹配:那么无论先手选哪个点开始,假设是S集合某点,那么后手沿匹配边走,先手要么沿匹配边再走到S集合某点,要么没法走.即先手必败: 二是不存在完美匹配: 1.先手从最大匹配点开始,好像胜负情况都有,先不考虑: 2.先手从…
noi2011 兔兔与蛋蛋 题目大意 直接看原题吧 就是\(n*m\)的格子上有一些白棋和一些黑棋和唯一一个空格 兔兔先手,蛋蛋后手 兔兔要把与空格相邻的其中一个白棋移到空格里 蛋蛋要把与空格相邻的其中一个黑棋移到空格里 谁不能移动谁输 分析 这篇博客挺好的 我们可以将题意转化成兔兔将空格移到白棋那里 蛋蛋将空格移动到黑棋那里 转化成图黑白染色,变成二分图 我们设空格染成黑色 那空格移动的轨迹一定是: 黑\(~\)-白-黑-白-黑 对应的是: 空格-白棋-黑棋-白棋-黑棋 所以染成白色且为白棋\…
首先对网格染色,发现是而二分图. 那么即在二分图上选一个起点走过的点无法再走,最后无路可走就输了. 如果起点必在最大匹配中,先手必赢. 如果起点不一定在最大匹配中(包括不可能在),后手必赢.网上有解释. 因为写二分图不怎么熟练,所以还是用网络流吧. 找的就是可行的和不在最大匹配中点.建边要用单向边. 从源点和汇点开始Dfs.假如从左边开始那么先扫到右边后又扫到左边.那么那个点就是可行点. #include <iostream> #include <cstring> #include…
题目链接 首先空格的移动等价于棋子在黑白格交替移动(设起点移向白格就是黑色),且不会走到到起点距离为奇数的黑格.到起点距离为偶数的白格(删掉就行了),且不会重复走一个格子. (然后策略就同上题了,只不过第一步是走棋子) 还是考虑二分图最大匹配.如果起点不一定在最大匹配上,先手走到最大匹配点,后手沿最大匹配边走,先手要么无法走要么回到刚刚的情况,即先手必败(最大匹配是一条奇数长路径). 反之,如果起点一定在最大匹配上,先手必胜. 判断一个点是否一定在最大匹配上可以先求一遍,再对非匹配点DFS.但是…
原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1443 反正不看题解我是完全想不出系列…… 先把棋盘黑白染色,也就是同一对角线上颜色相同,使得一个格子上下左右都不同色. 然后我们会发现,某一个人所走的全部格子颜色都是相同的. 把黑白格子当作点提取出来,放在两边,就变成了二分图,游戏的全过程变得像匈牙利算法的增广. 这提示我们也许跟二分图匹配有关. 如果一个点必定在最大匹配中,而一开始棋子放在了这里小YY只要沿着匹配边走小AA就gg了.…
考虑对非障碍的点黑白染色然后做二分图最大匹配,那么有结论,先手必胜当且仅当不是完美匹配,而且可以放的点是那些可以不匹配的点 从非匹配点开始走,后手只能走到匹配点,于是先手就可以走匹配边.由于不能走走过的点,所以现在又变成了一个非匹配点:这样下去直到后手无路可走,所以先手必胜 反观完美匹配的情况,先手放在任意一个匹配的位置,后手都可以走匹配边从而变成了上面的情况,就是后手必胜 这类问题大概可以总结为:(一类可以用二分图来描述的博弈问题) 1.博弈者人数为两人,双方轮流进行决策.2.博弈状态(对应点…
题意 链接 Sol 第一次做在二分图上博弈的题..感觉思路真是清奇.. 首先将图黑白染色. 对于某个点,若它一定在最大匹配上,那么Bob必胜.因为Bob可以一直沿着匹配边都,Alice只能走非匹配边.到最后一定是Alice不能移动. 否则Alice必胜.这个我不会证,但是又举不出反例来qwq.手玩了几个数据发现Alice总会有一种方法走某个非匹配边干掉Bob. 那么如何找不一定在最大匹配上的点呢?首先求出一个最大匹配,结论是从所有不在最大匹配上的点开始dfs,通过交叉边(目标点的匹配边)走到点都…
BZOJ 题意: 给出一个\(n*m\)的网格,其中有一些障碍点. 现在两个人玩游戏,首先先手选定一个点,然后从后手开始轮流移动,不能移动者即输掉这次游戏. 规定不能移动到那些之前已经到过的格子上. 思路: 网格图可以联想到二分图,我们可以对其进行黑白染色. 注意如果先手必赢的话,直到终点只会走偶数步,也就是说起点和终点格子的颜色不变. 也就是说,如果从二分图的左边出发的话,也只能到左边.这种情况等价于从二分图最大匹配中的非匹配点出发,也一定最后到达的左边. 因为最大匹配的情况可能有多种,所有可…
题意: 判断一个黑白染色的棋盘能否通过交换行或列使对角线上都是黑色. SOL: 真是有点醉...这种问题要么很神要么很水...第一眼感觉很水但就是不造怎么做...想了10分钟怎么感觉就是判断个数够不够n呢然后就蹦出了一个反例...然后就忍不了百度= =... 二分图匹配真是瞎了眼...然后发现好神又好水... 显然的同一行无论怎么交换都是同一行---->根本就没往这上面想...同一列永远都是同一列,那么只要判断有多少不同行又不同列的就好了...枚举有点虚,那么就匹配吧!按照行列建图,恩就是这样.…
4025: 二分图 题意:加入边,删除边,查询当前图是否为二分图 本来想练lct,然后发现了线段树分治的做法,感觉好厉害. lct做法的核心就是维护删除时间的最大生成树 首先口胡一个分块做法,和hnoi2016第一题类似的偏序关系,一样做. 线段树分治 数据结构题中如果使用对时间cdq分治,要求每个操作独立,不能很好的处理撤销(删除)操作. 采取线段树区间标记的思想 对于一个操作,它的存在时间是\([l,r]\) 我们模仿线段树打标记的过程进行分治,\(cdq(l,r,S)\)表示当前处理时间\…
Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简单的问题神犇当然会做了,于是他想考考你. 解题报告: 用时:2h30min,4WA 这题比较吼,首先想到要找奇环,然后我就不加思考的直接找奇环,然后取环上时间的公共部分,差分一波,发现时间不允许,然后线段树乱优化,发现并不能够维护,然后这么挂了,最后听说是cdq,按时间作为区间分治,然后加上完全在区间内的所有边,判断奇环,这里用到并查集的按秩合并,不能…
题目 显然二分图没有奇环 于是考虑使用并查集维护一下看看是否存在奇环 我们可以考虑加权并查集,维护出\(x\)到\(fa_x\)的实际距离 由于我们只需要考虑奇偶性,于是我们处理出到根的路径异或一下就好了 之后是动态删边的问题,我们可以考虑线段树分治 于是我们需要在线段树分治的时候维护一个并查集,还需要支持撤回操作 我们只需要一个不路径压缩的启发式合并并查集就好了 代码 #include<cstdio> #include<vector> #define re register in…
Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简单的问题神犇当然会做了,于是他想考考你. Input 输入数据的第一行是三个整数n,m,T. 第2行到第m+1行,每行4个整数u,v,start,end.第i+1行的四个整数表示第i条边连接u,v两个点,这条边在start时刻出现,在第end时刻消失. Output 输出包含T行.在第i行中,如果第i时间段内这个图是二分图,那么输出"Yes"…
我们可以将一个点拆成两个点x,y,那么如果存在一条i->j的路径,我们就连接xi,yj,那么答案就是n-最大匹配数. 因为i->j所以对于i与j只能选一个,那么我们只需要求出来二分图的最大独立集就可以了,二分图的最大独立集=点数-最大匹配. /************************************************************** Problem: 1143 User: BLADEVIL Language: C++ Result: Accepted Time…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4025 [题目大意] 给出一张图,有些边只存在一段时间,问在一个每个时间段, 这张图是否是二分图 [题解] 判断是否是二分图只要判断是否存在奇环即可, 我们对时间进行分治,在操作树上加删边, 保留涵盖时间区间的有效操作,将剩余操作按时间划分到两端的子树, 退出子树的时候撤销加边操作. 对于判断奇环,我们用并查集维护每个点与标兵的相对距离的奇偶性即可, 由于需要撤销操作,我们放弃对并查集…
题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C 与 A 不认识.我们假设每个人只能睡和自己直接认识的人的床.那么一个解决方案就是 B 睡 A 的床而 C 睡 B 的床.而实际情况可能非常复杂,有的人可能认识好多在校学生,在校学生之间也不一定都互相认识.我们已知一共有 n 个人,并且知道其中每个人是不是本校学生,也知道每个本校学生是否回家.问是否存在一个方案使得所…
好题. 首先看到棋盘,先黑白染色. 然后就是二分图的经典模型. 考虑最特殊的情况,完美匹配,那么先手必胜, 因为无论如何,先手走匹配边,后手无论走哪条边,总有对应的匹配边. 如果在不在最大匹配中出发,先手无论如何会走到最大匹配中,然后后手顺着匹配走,一定能胜利. (万一又走到非最大匹配中呢,显然这样我们会找到一条增广路,与最大匹配不符). 但是最大匹配不止又一种,所以我们需要判断是否在最大匹配中,需要寻找交错路. 如果在最大匹配中出发,显然先手必胜,(如果走到非最大匹配的点上,那么就相当于找到一…
思路: 棋盘是个二分图 那就把一个可以走的白点  向所有可以走的黑点连边 跑一个最大匹配   (匹配上了就代表这两个点不能共存) 最大独立集=sum-最大匹配 //By SiriusRen #include <queue> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; ,M=N*N*; ,jy,ans,sum; ],tot,T,cnt; ,-,,-…