
二分匹配
文章平均质量分 55
菜鸟起航
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
poj 3041 (最大匹配)
题意:给出一些危险小行星的位置,一次能消灭一行或一列的小行星,为最少多少次能消灭完。思路:就是行跟列的最大匹配.#include#includeconst int N=510;int map[N][N],match[N],link[N],n;int find(int i){ int j; for(j=1;j<=n;j++) { if(map[原创 2013-09-18 21:24:26 · 974 阅读 · 0 评论 -
poj 3020 (二分匹配)
题意:给出一些城市的坐标,每个信号基站可以覆盖两个相邻的点,问最少要建多少个基站。思路:我们要尽可能多的建立能覆盖两个城市的基站(二分匹配最大匹配),剩下的城市每个城市建立一个基站。先求出最大匹 配数k。n-k*2+k=n-k;#include#includeconst int N=500;int head[N],nu原创 2013-09-19 19:40:45 · 857 阅读 · 0 评论 -
poj 2446 (二分匹配)
题意;除了所给的一些点外,问能不能用1*2的矩形覆盖所有的点,矩形间不能重叠。思路:简单二分匹配,手速,,,,,,#include#includeconst int N=1200;int match[N],link[N],map[35][35],n,m;int dir[4][2]={0,1,0,-1,1,0,-1,0};int find原创 2013-09-24 21:37:38 · 794 阅读 · 0 评论 -
poj 3216 (最小路径覆盖)
题意:有n个地方,m个任务,每个任务给出地点,开始的时间和完成需要的时间,问最少派多少工人去可以完成所有的任务。给出任意两点直接到达需要的时间,-1代表不能到达。思路:很明显的最小路径覆盖问题,刚开始脑子抽了,没求最短路直接就做了,题目只给了两点间直接到达的时间,还可以间接到达,用floyd求出最短路。。。#include#includeco原创 2013-09-24 21:37:29 · 953 阅读 · 0 评论 -
hdu 3335 Divisibility (最小路径覆盖)
最小路径覆盖,覆盖的点都不选,剩余的点就没有关系可以选上 #include#includebool map[1001][1001],link[1001];int match[1001];int n;__int64 a[1001];int find(int u){ int i; for(i=0;i<n;i++) {原创 2013-04-25 16:16:51 · 782 阅读 · 0 评论 -
hdu 3315 (KM,优先选择原来的匹配)
题意很明确,,就是一个二分图,求最优匹配,,蛋疼的是第二个要求,有多少个跟原来的匹配,就是优先选择原来的匹配,跟hdu 2853一样,将边的权值扩大1000倍,原来的匹配边+1,求得的值sum/1000就ok了,原来的匹配个数=sum%1000。。。。#include#include#includeconst int N=110;const in原创 2013-08-15 21:18:18 · 978 阅读 · 0 评论 -
hdu 2768 (二分匹配,最大独立集)
求最大留下的观众,观众之间存在不能同时满足的关系,就是矛盾关系,矛盾关系建边,建边是双向的所以最大匹配要/2还有一种建图的方法:把观众分成两个集合,一个是投留下猫的,一个是投留下狗的每个集合间没有矛盾关系,就是二分图了,求出最大匹配,两种方法都是要求最大独立集#include#include#define N 510int map[原创 2013-07-24 12:30:23 · 807 阅读 · 0 评论 -
hdu 4619 (二分匹配,最大匹配)
这题最大匹配居然能水过去,比赛的时候怎么想都会超时,最后敲完能A了,,,,,,,#include#include#define N 20000int link[20000],vis[N],match[N],n,m;struct edge{ int y; edge *next;}*E[20000];void added原创 2013-08-15 21:40:46 · 797 阅读 · 0 评论 -
hdu 1068 (最大独立集)
找出没有缘分的同学,如果有缘分的建边,就是求最大独立集问题了#include#includeint n,m,ma[1050][1050],mark[1050],link[1050];int find(int a){ int i; for(i=0;i<n;i++) { if(ma[a][i]==1&&mark[i原创 2013-07-24 09:15:34 · 987 阅读 · 0 评论