
匹配
文章平均质量分 57
LeeBooL
这个作者很懒,什么都没留下…
展开
-
Strategic Game
其实这道题完全可以用树形DP做, 为了练习匹配问题就用匹配做了, 这个就是求最小点覆盖, 就一个裸地求最大匹配然后用N-最大匹配就好了,因为无向,所以双向边,然后求出来的最大匹配/2就是我们真正的匹配数 #include #include #include #include #include #include using namespace std; #define MAX原创 2015-03-25 23:59:20 · 367 阅读 · 0 评论 -
UVALive - 6322 The Swapping Game
题意:给一个串以及串中每个字符可以交换的字符是谁,然后一次只可以交换两个字符, 可以交换零次或者多次。求合理的字典序最小的字符串 input:T -〉有多少组数据,初始串str, 接下来n(n = |str|)行,第i行表示第str中第i个字符可以替换成哪几个字符, output: 如果没有一种合理的解决方法 : NO SOLUTION ,否则输出最小串思路:二分图匹配, 每一个字符都会给你一个原创 2015-08-15 13:48:07 · 372 阅读 · 0 评论 -
棋盘游戏
就是判断下那个节点会影响匹配,那么我们就依次枚举好了,我们先求出最大匹配,然后以检测点是不是关键点 #include #include int map[105][105],pre[105],vis[105]; int n,m; int hungry(int u) { int v; for(v=1;vm;v++) { i原创 2015-03-24 23:57:15 · 333 阅读 · 0 评论 -
Fire Net
#include #include #include using namespace std; char str[5][5]; int n, ans; bool check( int x, int y) { for( int i = x - 1; i >= 0; i--) { if(str[i][y] == 'O') return false;原创 2015-03-24 23:53:02 · 370 阅读 · 0 评论 -
Antenna Placement
就是二分图匹配, 要求把每一个*都能盖上的最小DAir antennas的数目, 那么我们首先先把能共用的数目求出来,就是求最大匹配, 然后用总数减去可以跟别人共用的数目就是我们必须使用的最小数目 #include #include #include #include using namespace std; #define MAXN 1000 char gr原创 2015-03-25 00:38:28 · 363 阅读 · 0 评论 -
Swap
首先我们要想明白一点,主对角先一定是 i == j 的点是marix[i][j]1, 也就是第I行必须要跟第I列匹配, 那么这道题就变成了一个二分图匹配问题 如果 i行可以跟I列匹配, 那么一定有解, 也就是最大匹配数一定等于矩阵行数 #include #include #include #include #include using namespa原创 2015-03-25 00:02:33 · 283 阅读 · 0 评论 -
Courses
模板题 #include #include #include #include #include using namespace std; #define MAXN 300 int match[MAXN]; bool vis[MAXN], gra[MAXN][MAXN]; int p, n; bool dfs( int x) { for( int i = 1; i n;原创 2015-03-24 23:55:47 · 291 阅读 · 0 评论 -
Rain on your Parade
这道题其实就是一个Hopcroft-Carp模板题 在匈牙利算法中,我们每次寻找一条增广路来增加匹配集合M.可以证明,每次找增广路的复杂度是O(E),一共需要增广O(V)次,因此总时间复杂度为O(VE).为了降低时间复杂度,在Hopcroft Karp算法中,我们在增加匹配集合M时,每次寻找多条增广路.可以证明,这样迭代次数最多为2*V^0.5,所以,时间复杂度就降到了O(V^0.5*E).原创 2015-03-25 00:04:49 · 351 阅读 · 0 评论 -
The Accomodation of Students
典型的二分图最大匹配题 我们要先判断这个图是不是二分图,可以用染色法来实现 #include #include #include #include using namespace std; #define MAXN 222 bool gra[MAXN][MAXN], vis[MAXN]; int match[MAXN], col[MAXN]; int ans, n原创 2015-03-24 23:54:05 · 378 阅读 · 0 评论 -
Oil Skimming
很简单一个二分图题,可是我RE+MLE + WA了将近40次 百思不得其解的问题 当我直接在char 数组上存放序号就是RE, 而当我用另一个数组存放序号就是AC WHY???????? RE代码 #include #include #include using namespace std; #define MAXN 666 char gra[MAXN][MAXN原创 2015-03-24 23:51:51 · 327 阅读 · 0 评论 -
Optimal Milking
有一些牛,和一些牛奶站,没个牛奶站每天最多收M只牛奶的牛, 怎样安排可以是所有牛到牛奶站的最长路径最短 思路: 路径最短-》最短路 求最大值最小 -》 二分 牛 -》 牛奶站 多值匹配 but这个题二分取值上限要取好, 开始1000 WA了无数次, 然后去了POJ 的 MESSAGE 改成200000就过了原创 2015-03-31 07:54:54 · 349 阅读 · 0 评论 -
Courses
裸地二分匹配 #include #include #include #include #include using namespace std; #define MAXN 300 int match[MAXN]; bool vis[MAXN], gra[MAXN][MAXN]; int p, n; bool dfs( int x) { for( int i原创 2015-03-21 23:49:15 · 315 阅读 · 0 评论 -
Air Raid
一个有向图,且我们要注意一句话. Each paratrooper lands at an intersection and can visit other intersections following the town streets. 所以我们要先把所有能通向的点都连上边,然后最小点覆盖 #include #include #include #include using n原创 2015-03-26 00:00:57 · 539 阅读 · 0 评论 -
Treasure Exploration
裸地求最大匹配 #include #include #include #include using namespace std; #define MAXN 666 bool gra[MAXN][MAXN], vis[MAXN]; int cx[MAXN], cy[MAXN]; int n; bool dfs( int u) { for(int i = 1; i n;原创 2015-03-26 00:02:25 · 456 阅读 · 0 评论 -
Cat VS Dog
这个题转换思维有挺巧妙,我们首先要抽象出两个对立的集合,然后找出他们的关系,其实题中已经有暗示了,他说喜欢狗的人不喜欢的一定是猫,喜欢猫的人一定不喜欢狗,假若我们相用猫狗建图, 那么我们可以向下边的含义是什么呢,是对立关系么,似乎跟我们想求得答案没什么太大关系,那么我们换一个角度,想要开心的人最多,也就是想让不开心的人最少,那么我们把人抽象成图里的点,然后之间有对立关系的我们连线,那么这就是求一个最原创 2015-03-26 00:08:27 · 1331 阅读 · 0 评论 -
URAL - 1949 The Best Picture in the Galaxy
传送门:http://acm.timus.ru/problem.aspx?space=1&num=1949 题意 : k 个学生去看n个电影,每个电影有自己的开始时间,结束时间和女演员数目,并且,要保证一个学生同时不能看两场电影,其次,学生看的第i+1个电影的女演员数目要不小于他看的第i的电影的女演员数。 求看最多的电影数目时,看了那几部,没看哪几部,1 表示看过0表示没看过思路:二分图,但是要原创 2015-08-15 13:59:20 · 605 阅读 · 0 评论