hdu 1526(最大匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1526
思路:floyd求传递闭包,然后就是最大匹配了,不过一开始输入没看清,被坑了将近2个小时。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
#define MAXN 111
vector<int>vet[MAXN];
bool mark[MAXN];
int ly[MAXN],lx[MAXN];
int Index[MAXN];
int map[MAXN*][MAXN*];
char str[MAXN*][];
int n,m,K,vn,vm; int GetID(char ss[])
{
for(int i=; i<n; i++) {
if(strcmp(str[i],ss)==)return i;
}
strcpy(str[n++],ss);
return n-;
} void floyd()
{
for(int k=; k<n; k++)
for(int i=; i<n; i++)
for(int j=; j<n; j++)
if(i==j)map[i][j]=true;
else map[i][j]=(map[i][j]||(map[i][k]&&map[k][j]));
} int dfs(int u)
{
for(int i=; i<vet[u].size(); i++) {
int v=vet[u][i];
if(!mark[v]) {
mark[v]=true;
if(ly[v]==-||dfs(ly[v])) {
ly[v]=u;
lx[u]=v;
return ;
}
}
}
return ;
} int MaxMatch()
{
int res=;
memset(lx,-,sizeof(lx));
memset(ly,-,sizeof(ly));
for(int i=; i<vm; i++) {
if(lx[i]==-) {
memset(mark,false,sizeof(mark));
res+=dfs(i);
}
}
return res;
} int main()
{
// freopen("1.txt","r",stdin);
int _case,t=;
char s1[],s2[];
scanf("%d",&_case);
while(_case--) {
if(t++)puts("");
scanf("%d",&n);
for(int i=; i<n; i++) {
scanf("%s",str[i]);
}
scanf("%d",&m);
vn=n,vm=m;
memset(map,false,sizeof(map));
for(int i=; i<m; i++)vet[i].clear();
for(int i=; i<m; i++) {
scanf("%s%s",s1,s2);
Index[i]=GetID(s2);
}
scanf("%d",&K);
for(int i=; i<K; i++) {
scanf("%s%s",s1,s2);
map[GetID(s1)][GetID(s2)]=true;
}
floyd();
for(int i=; i<vm; i++) {
for(int j=; j<vn; j++) {
if(map[Index[i]][j])vet[i].push_back(j);
}
}
int ans=MaxMatch();
printf("%d\n",m-ans);
}
return ;
}
hdu 1526(最大匹配)的更多相关文章
- POJ 1087 A Plug for UNIX / HDU 1526 A Plug for UNIX / ZOJ 1157 A Plug for UNIX / UVA 753 A Plug for UNIX / UVAlive 5418 A Plug for UNIX / SCU 1671 A Plug for UNIX (网络流)
POJ 1087 A Plug for UNIX / HDU 1526 A Plug for UNIX / ZOJ 1157 A Plug for UNIX / UVA 753 A Plug for ...
- HDU 2853 最大匹配&KM模板
http://acm.hdu.edu.cn/showproblem.php?pid=2853 这道题初看了没有思路,一直想的用网络流如何解决 参考了潘大神牌题解才懂的 最大匹配问题KM 还需要一些技巧 ...
- hdu 2413(最大匹配+二分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2413 思路:由于要求最少的时间,可以考虑二分,然后就是满足在limit时间下,如果地球战舰数目比外星战 ...
- hdu 2389(最大匹配bfs版)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2389 思路:纯裸的一个最大匹配题,不过悲摧的是以前一直用的dfs版一直过不了,TLE无数次啊,然后改成 ...
- hdu 4619 最大匹配问题
思路:把所有涉及到的点按(x+y)的奇偶分成两部分点,对所有的1*2的骨牌,都有(x+y)为偶数的建到奇数的边.求一次最大匹配,就是答案. #include<iostream> #incl ...
- HDU 2063 最大匹配的基础题
中文题,题目大意不说了. 思路:就是寻找最大匹配,最大匹配就是每次找增广路,如果存在增广,那就把增广路上面的边全部都翻转即可.这样说明能多匹配一个,+1即可. //看看会不会爆int!数组会不会少了一 ...
- hdu 3729 最大匹配
此题是我AC的HDU的201道题目.泪流满面啊! 字典序最大(最小)真是个烦人的东西. 学生i与其对应的分数区间的每个点连一条边.字典序最大,编号最大的学生开始匹配. HK无法AC啊,试了很久.我不会 ...
- hdu 2063最大匹配
#include<stdio.h> #include<string.h> int link[600],mark[600],map[600][600],m,n; int find ...
- hdu 1179最大匹配
#include<stdio.h> #include<string.h> #define N 200 int map[N][N],visit[N],link[N],n,m; i ...
随机推荐
- [整理]Selector、shape详解
Selector.shape详解(一) Selector的结构描述: <?xml version="1.0" encoding="utf-8"?> ...
- ElasticSearch版本升级备忘录(1.5.2至2.3.1)
discovery机制默认为单播,需配置discovery.zen.ping.unicast.hosts:,如果各节点使用默认端口,则只配IP即可(["172.17.4.47", ...
- Java之HttpURLConnection的变态事: Keep-Alive
HttpURLConnection的变态事: Keep-Alive JDK自带的HttpURLConnection默认启动Keep-Alive, 使用后的HttpURLConnection会放入池里重 ...
- Java之蛋疼的file Protocol
file Protocol Opens a file on a local or network drive. Syntax file:///sDrives[|sFile] Tokens sDrive ...
- 条款2:尽量以const、enum、inline替换#define
1> 以const替换#define • 比如用const double Ratio = 1.653替换#define RATIO 1.653 因为宏定义在预处理阶段就会被替换成其所指代的内容, ...
- 动态链接库知识点归纳之一(DLL概念,如何建立,如何使用,如何优化,如何查看)
简单的总结一些动态链接库的一些知识,方便以后查找. 首先,新建一个动态链接库 (1) 打开编辑器,选择WIN32项目, dll,如下图,项目名字为:test,选择空项目.如下图 (2) ...
- IOS获取手机设备型号
最新型号的设备列表https://www.theiphonewiki.com/wiki/Models #import "iosutils/IOSUtils.h" #import & ...
- apache-activemq-5.14.0学习总结
一.什么是ActiveMQ? 百度百科对ActiveMQ的描述:
- CSS3 filter10种特效整理
-webkit-filter是css3的一个属性,Webkit率先支持了这几个功能,感觉效果很不错.一共有10种最基本的特效,下来这个DEMO很好的展示了这些效果: <!DOCTYPE html ...
- iOS基础问答面试
<简书社区 — Timhbw>iOS基础问答面试题连载(一)-附答案:http://www.jianshu.com/p/1ebf7333808d <简书社区 — Timhbw> ...