摘要:
这题与HDU1281类似,都是行列最大匹配。 这题说准确一点儿时求最小点集覆盖,枚举每种颜色,如果当前颜色的最小点集覆盖大于k,那么k次选择都不可能把该种颜色完全消灭。View Code 1 #include <stdio.h> 2 #include <string.h> 3 #include <vector> 4 using namespace std; 5 6 const int maxn = 100 + 5; 7 int n, k; 8 bool vis[maxn]; 9 int link[maxn];10 int g[maxn][maxn];11 1 阅读全文
摘要:
行和列构成二分图,对于某个位置[x, y],如果可以放“车”,那么行x和列y连一条有向线 x -> y (g[x][y] = 1),在进行二分图匹配的时候,如果该某位置的连线算入了最大匹配中,根据最大匹配的定义知该位置所在的行和列肯定被屏蔽掉(不会进入最大匹配中)。那么有: 能放的棋子数 L 即为最大匹配;而要计算某个点是否为重要点,只需要将该点连线去掉,计算最大匹配,如果此时计算得到的最大匹配小于原最大匹配,那么该点为重要点,这是我们枚举所有可放棋子点即可。View Code 1 #include <stdio.h> 2 #include <string.h> 阅读全文
摘要:
本题求最大独立集,那么用公式: 最大独立集 = 总结点数 - 最大匹配 对于这道题来说,发现给出的数据构造出的是一个无向图,那么直接匈牙利计算会重复,得出的是2倍的最大匹配。 所以最后结果得出的最大匹配值要除以2.View Code 1 #include <iostream> 2 #include <string.h> 3 #include <stdio.h> 4 using namespace std; 5 6 const int M = 500 + 2; 7 bool g[M][M], vis[M]; 8 int link[M], m, n, k; 9 阅读全文