问题描述 $N$ 个齿轮每个齿轮有颜色(RGB),有些齿轮之间会咬合,你需要删除尽量少的齿轮并给每种颜色安排方向使得咬合齿轮不同向。问最多保留多少个齿轮。保证不存在两个相同颜色的齿轮咬合。 "submit" 交互输入输出大毒瘤! 题解 发现对于 RGB 三种颜色的齿轮,相同颜色不会自己和自己咬合。 ...
分类:
其他好文 时间:
2019-12-20 20:46:38
阅读次数:
93
俗称HK算法。和匈牙利算法一个功能,但是复杂度更优。匈牙利算法复杂度O(VE),HK算法复杂度O(sqrt(V)*E)。 但是很容易写崩,别问我怎么知道的。 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int MAXN=500;/ ...
分类:
编程语言 时间:
2019-11-29 00:47:22
阅读次数:
124
网络流可以解决 二分图最大匹配(网络中的每条边的容量设为1) 多重匹配() 网络流最大流问题的算法 Edmonds karp增广路算法A$O(m^{2}n)$ dinic算法 1.在图上找到一条从源点到汇点的路径(称为‘增广路’)。 2.取增广路上的残量最小值v。(也就是流过的路径中流量最小的那一个 ...
分类:
其他好文 时间:
2019-11-03 20:12:24
阅读次数:
89
二分图最大匹配 匈牙利算法 cpp include using namespace std; const int maxnx=1e3+5; const int maxny=1e3+5; const int maxm=2e6+5; int nx,ny,m; int my[maxny]; int vis ...
分类:
其他好文 时间:
2019-10-30 19:57:09
阅读次数:
100
定义 二分图也称二部图,是图论里的一种特殊模型,也是一种特殊的网络流。其最大的特点在于,可以将图里的顶点分为两个集合,且集合内的点没有直接关联,如下图所示。 如果某个图为二分图,那么它至少有两个顶点,且其所有回路的长度均为偶数,任何无回路的的图均是二分图。 1.染色法判断二分图 染色法是对每一个点深 ...
分类:
编程语言 时间:
2019-10-30 18:30:22
阅读次数:
92
所谓二分图,是可以分为两个点集的图; 所谓二分图最大匹配,是两个点集之间,每两个不同点集的点连接,每个点只能连一个点,最大的连接数就是最大匹配。 如何解最大匹配,需要用到匈牙利算法。 匈牙利算法是一个递归的过程,它的特点,我觉得可以归为一个字:“让”。 例如这张图,按照匈牙利算法的思路就是: 1.1 ...
分类:
其他好文 时间:
2019-09-14 17:17:02
阅读次数:
95
题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示。当他使用某种装备时,他只能使用该装备的某一个属性。并且每种装备最多只能使用一次。游戏进行到最后,lxhgww遇到了终极boss,这个终极boss很奇怪,攻击他的装 ...
分类:
编程语言 时间:
2019-09-06 22:44:28
阅读次数:
110
(点击此处查看原题) 匈牙利算法简介 个人认为这个算法是一种贪心+暴力的算法,对于二分图的两部X和Y,记x为X部一点,y为Y部一点,我们枚举X的每个点x,如果Y部存在匹配的点y并且y没有被其他的x匹配,那就直接匹配;如果Y中已经没有可以和x匹配的点(包括可以匹配的点已经被其他的x匹配),那就让已经匹 ...
分类:
编程语言 时间:
2019-08-31 10:54:56
阅读次数:
107
传送门 题目求最少要多少支军队可以把所有城镇覆盖完(DAG的最小不相交路径覆盖) 军队只能向下走,所以建图时就往四个方向连边,最后跑一下最小路径覆盖即可(=点数 - 二分图最大匹配) #include<bits/stdc++.h> #define N 53 using namespace std; ...
分类:
其他好文 时间:
2019-08-27 22:53:03
阅读次数:
140
1 bool dfs(int u) 2 { 3 for (iterator_t i = G[u].begin(); i != G[u].end(); ++i) { // 对 u 的每个邻接点 4 int v = edges[*i].to; 5 if (!check[v]) { // 要求不在交替路中... ...
分类:
编程语言 时间:
2019-08-22 00:34:11
阅读次数:
89