二分图
seeeagull
这个作者很懒,什么都没留下…
展开
-
[poj3020]Antenna Placement(二分图最大匹配)
这种上下或左右相邻的问题可以考虑黑白染色法。横纵坐标相加为奇数的染黑,偶数染白,这样每个点和四周的四个点颜色不同,建边后就形成二分图。先假设每个*都要放天线,然后最大匹配显然就是可以省掉的天线数,一减即可得到答案。#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int H=50,W=20,N=210;int t,h,w,cnt,num1,num2,v原创 2020-08-22 22:49:39 · 152 阅读 · 0 评论 -
[poj3041]Asteroids(二分图最大匹配)
求最小顶点覆盖,即求二分图最大匹配。可以一下消除一行或一列,属于行列匹配法。#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N=510;int n,k,cnt,map1[N][N],mat[N],vis[N];inline int read(){ int x=0;char ch=getchar(); while(ch<'0'||c原创 2020-08-22 22:43:48 · 101 阅读 · 0 评论 -
[洛谷P1640] [SCOI2010]连续攻击游戏(二分图最大匹配)
建二分图,将每个装备看作右侧的点,所有属性看作左边的点,分别从装备的两个属性向装备连边,然后匈牙利求二分图最大匹配。最大匹配保证了每个装备只用一次,而匈牙利算法的特点就是按顺序依次匹配。按属性从小到大的顺序,在匹配属性i时,小于i的一定已经匹配完了。如果匹配i失败,就输出i-1,全部成功的话记得输出n。#include<cstdio>#include<cstring&...原创 2019-01-21 13:51:51 · 177 阅读 · 0 评论 -
[洛谷P1963] [NOI2009]变换序列(二分图最大匹配)
题意就是对于一个包含0~n-1的集合,把它打乱顺序,给出现在第i个数和原来第i个数相比,两者差的绝对值和n减这个绝对值的最小值。需要推出一组满足要求的打乱后的顺序,并且在所有可行的方案中字典序最小。左边的点是原始的0~n-1,右边是变换序列的0~n-1。若给出的绝对值为a,初始的i可能对应的转换后的值可能为i+a,i-a,i+(n-a),i-(n-a),注意需要判断这四个取值是否都在0~n-1...原创 2019-01-21 13:53:46 · 147 阅读 · 0 评论 -
[洛谷P1129] [ZJOI2007]矩阵游戏(二分图最大匹配—dinic)
可以发现,初始在同一行或同一列的多个点,变换之后一定还在同一行或同一列。所以如果想要使对角线全黑,一定要找到n个黑格分别在不同的行且在不同的列。所以建二分图,左边为行数,右边为列数,如果(i,j)为黑,就从i向j连一条边。如果最大匹配数等于n就有解,因为此时每行都匹配到了不同的列;反之则说明无解。(dinic版本)#include<cstdio>#include<cstr...原创 2019-01-22 16:09:39 · 188 阅读 · 0 评论 -
[洛谷P1129] [ZJOI2007]矩阵游戏(二分图最大匹配—匈牙利)
题解见上一篇啦,这里是匈牙利算法版本。#include<cstdio>#include<cstring>const int N=210;int T,n,map[N][N],rit[N];bool flag,vis[N];inline int read(){ int x=0,f=0; char ch=getchar(); while(ch<'0'|...原创 2019-01-22 16:10:07 · 168 阅读 · 0 评论