二分匹配
文章平均质量分 74
keyboarder_zsq
你所认为的极限,其实是别人的起点。
展开
-
HK算法模板+小优化(跑的快一点点)
HUST 2604#include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <queue> #include <cmath> using namespace std;const int N = 300010; const int MAXM = 300010; const int INF =原创 2016-05-13 22:51:02 · 1141 阅读 · 0 评论 -
二分图中的匹配
问题一(未完): 考虑n行m列的棋盘,其某些方格禁止落子。能够被放到棋盘上的非攻击型车的最多个数。 考虑4行5列的棋盘,其落子位置如下表: y1 y2 y3 y4 y5 x1 * x2 * * x3 * * * x4 *原创 2017-03-20 00:56:52 · 291 阅读 · 0 评论 -
POJ3715【二分匹配-增广】
题意: N个人,有两种人,M对亲密关系,问最少删除几个人达到没有亲密关系。 思路: 最大匹配 = 最小独立集,删掉该人对最大匹配数的影响,如果没有影响,删不删都无所谓,如果有影响贼删除; 类似HDU1281; 处理可用删除这个点以后找增广,如果找的到增广则无影响,找不到增广则有影响。 错误就是二分图,我要删的点有两种,两组点都有可能删除,*单方面删除了一种*。 错误在了无意识偏爱原创 2017-02-03 14:39:45 · 457 阅读 · 0 评论 -
HDU2819【二分匹配与矩阵的秩】
题意: 给出一个矩阵问能否实现对角线全部是1,能的话输出路径,不能的话输出-1 思路: 首先根据矩阵的性质,这一定是一个满秩矩阵,所以只根据行或列交换就一定能实现。 所以行和列构成二分图,然后跑一发匈牙利就知道行不行。 然后怎么输出交换的步骤呢,我们只考虑列交换的话,在对于数组cy[ ]也就是存列的配对对象的数组,对于每个列可以寻找哪个列配对的行是等于他的,因为对角线上行等于列。原创 2017-02-02 20:42:34 · 434 阅读 · 0 评论 -
POJ3692【二分匹配】
题意: 有男生女生,男生都认识双方,女生都认识双方,给出一些男女关系,问最大拿多少个人,使得所有人都认识双方。 思路: 原图最大团=总结点数-[【补图(补图为二分图)】的最大独立集=最大完全子图的顶点数];//#include #include #include #include using namespace std; typedef long long LL; const int N=原创 2017-02-10 14:06:44 · 317 阅读 · 0 评论 -
HDU1083 【匹配问题】
题意: 有P门课,N个学生,给出每门课上的人。 然后问你能不能使得每门课有一个课代表 思路: 课和学生是两类,且同类之间没有关系,构成二分图;直接就是一个最大匹配问题; 注意点: 1.是给课进行匹配不是学生 2.比如二分图有A,B两类,A与B允许编号相同,但是如果A中的点到B中的点建边, 这个意义是A对B有关系,B能去匹配A,这一定不是双向边,双向边就额外多了层关系啊, 而且如果原创 2017-01-19 19:50:51 · 399 阅读 · 0 评论 -
HDU3478 【判奇环/二分图的性质】
题意: 给你一幅图,给你一个起点,然后问你存不存在一个时刻,所有点可以在那个时刻到达。 思路: 这幅图首先是联通的; 如果出现奇数环,则满足在某一时刻都可能到达; 然后判断奇数环用二分图性质搞也是神奇... #include using namespace std; #include using namespace std; /* 题意: 使某一时刻到达该图任意顶点: 1.图是联原创 2017-01-18 23:34:17 · 924 阅读 · 0 评论 -
HDU2444 【二分图判定+最大匹配】
套模板很好的题? #include using namespace std; const int N=2e2+10; const int M=4e4+10; struct asd{ int to; int next; }; asd q[M]; int head[M],tol; int n,m; int col[N]; void add(int u,int v) { q[tol].t原创 2017-01-18 21:13:03 · 401 阅读 · 0 评论 -
HihoCoder 1121二分图一•二分图判定
背景: 新年回家,又到了一年一度大龄剩男剩女的相亲时间。Nettle去姑姑家玩的时候看到了一张姑姑写的相亲情况表,上面都是姑姑介绍相亲的剩男剩女们。每行有2个名字,表示这两个人有一场相亲。由于姑姑年龄比较大了记性不是太好,加上相亲的人很多,所以姑姑一时也想不起来其中有些人的性别。因此她拜托我检查一下相亲表里面有没有错误的记录,即是否把两个同性安排了相亲。 题意:判定是不是一个二分图(因为我们并原创 2017-01-18 10:36:18 · 567 阅读 · 0 评论 -
POJ3020【二分匹配】
思路: ---说给自己 一开始想的是从1-h*w标记整幅图,建图是星号和 {他,与他相连的星号} 建边,肯定要去匹配"*"啊,所以空格一定不会去造,然后就理解成了最小点覆盖,然而对于最小点覆盖,对于 孤立点(也就是没有连出去的边) ,这样就错了。。。但是对于这个思路还是打完了,然后发现错了。。。其实对于“正确”思路要先想想是嘛。。。 ---正解 这题题意是一个圈最多只能圈两个" * ",那原创 2016-11-09 21:08:22 · 404 阅读 · 0 评论 -
POJ1466/HDOJ1068 谈谈二分匹配的时间复杂度
题意: n个学生编号是0-n-1,然后给出他们这些人和一些人的关系。 要你找出最大的人数,要求这些人之间没关系。 咳咳,题目中没说性别的关系TVT 思路: 很明显是一个匹配算法,但是我们得搞出一个二分图; 将每个点拆成两个点,一个当作是男的点,一个当作是女的点,匹配一遍,由于关系是相互的,这样就造成了边的重复。也就是边集是刚才的二倍,从而导致了最大匹配变成了二倍。 所以我们要算的 最大原创 2016-05-18 15:04:52 · 649 阅读 · 0 评论 -
HDU 3729【二分匹配】
题意: 给出n个同学的排名,代表每个排名在哪个区间,要求保证最多人说的是实话,并在此前提下求一个说真话人最大字典序。 思路: 最后感觉就是点去填区间,点和区间建个边,然后跑个二分图,然后sort一发。#include<cstdio> #include<vector> #include<string.h> #include<iostream> #include<algorithm> using原创 2016-09-29 00:23:56 · 375 阅读 · 0 评论 -
hdoj1528【二分匹配】
题意: 在一幅扑克牌里,有两个人在比大小,第二个人最多能赢第一个人几张牌。 思路: 这道题目用一下二分匹配还是很明显的。 那么就是建图似乎要麻烦一下,但还是很方便的。将扑克牌一次进行编号,然后牌面比他小的就有一条边。这是一张大的图,两个人的手牌还是要标记一下,因为我们只对取到的牌操作。然后就是在这个范围内跑一跑二分匹配就好了。还是满基础的建图+二分匹配,我都1A了…code:#include原创 2016-06-02 22:34:31 · 561 阅读 · 0 评论 -
二分匹配ZOJ3646
//题意:类比线代里:把矩阵中的U看作【1】,是否满足一个满秩矩阵 //利用二分匹配就是 //每一行都有相对应的列; #include<iostream> #include<string.h> #include<set> #include<queue> #include<sstream> using namespace std; #define N 220 char s[N][N]; int m原创 2016-05-20 14:09:23 · 551 阅读 · 0 评论 -
poj2239 poj1274【二分匹配】
题意: 就是尽可能的选多的课思路: 把课程和上课的时间看作二分图 跑一跑二分匹配就好了#include<iostream> #include<cstdio> #include<string.h> #include<algorithm> using namespace std; #define INF 0x3f3f3f3f #define N 350int cos[10][20];原创 2016-05-19 16:59:35 · 520 阅读 · 0 评论 -
HDU 2063 过山车+poj 1469
//这是一个非常简单的匹配。其实满感觉这种算法讲道理是可以想到。 //但是我们这种弱就只能先学了匈牙利算法,然后随便嗨这种题目了。没事结果都一样。//这就是匹配算法的DFS形式,有一个BFS形式的,说是适用于稀疏二分图,但是时间复杂度还是(n*m)。。。 //也不是很懂DFS和BFS版有什么差,但是真的有差别,那就上HK算法了,时间复杂度(sqrt(n)*m); #include <iostre原创 2016-05-16 18:21:10 · 482 阅读 · 0 评论 -
hdoj1150(最小点覆盖)
题意: 两台机器,A台机器有N种模式,B台机器有M种不同的模式,初始模式都是0 以及K个需要运行的任务(i,x,y),在A台机器是x模式,在B台机器是y模式。 请合理为每个任务安排一台机器并合理安排顺序, 每个任务要有对应A B机器的模式中至少要有一种来运行 每次切换都会付出代价1,使得代价最小, - -求出这个最小值。思路: 这很明显是有张二分图。 点:A模式,B模式;原创 2016-05-16 22:28:14 · 665 阅读 · 0 评论 -
CodeForces 116B【二分匹配】
思路: 暴力。。我不会呀。。 YY一个二分匹配嘛,然后数组开小了。GG for an hour. #include using namespace std; typedef long long LL; int cy[110]; int cx[110]; int n,m; char ma[15][15]; int g[15][15]; int mma[110][110]; int dx[原创 2017-03-20 22:29:16 · 480 阅读 · 0 评论