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 ...
随机推荐
- linux 禁止指定账号ssh登陆
1 2 3 4 vim /etc/pam.d/sshd #在第一行添加以下代码 auth required pam_listfile.so item=user sense=de ...
- 面向对象原生js幻灯片代淡出效果
面向对象原生js幻灯片代淡出效果 下面是代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" & ...
- Ubuntu 12.04 Desktop使用XAMPP
Ubuntu 12.04 Desktop安装XAMPP Ubuntu 12.04 Desktop配置XAMPP Ubuntu 12.04 Desktop使用XAMPP 1/打开GUI界面的管理工具 终 ...
- UserDefault 用户首选项读写 swift
// // ViewController.swift // 首选项数据读写 // // Created by mac on 15/7/12. // Copyright (c) 2015年 fangyu ...
- struts2标签详解
struts2标签讲解 要使用Struts2的标签,只需要在JSP页面添加如下一行定义即可:<%@ taglib prefix="s" uri="/struts-t ...
- 移动端 js touch事件
随着智能手机和平板电脑的普及, 越来越多的人用移动设备浏览网页,我们平时在pc浏览器上用的鼠标事件,比如:click, mouseover等, 已经无法满足移动设备触摸屏的特点,触摸时代的到来,离不开 ...
- Drools规则加载变量冲突问题分析
问题现象说明 在个别环境下加载规则时出现:rule/trade/hg/Rule_FY_*.java (53:3948) : Duplicate local variable paraMap,出现此问题 ...
- c++ swap 函数
转载地址 1,最通用的模板交换函数模式:创建临时对象,调用对象的赋值操作符. template <class T> void swap ( T& a, T& b ) { T ...
- java加载机制整理
本文是根据李刚的<疯狂讲义>作的笔记,程序有的地方做了修改,特别是路径,一直在混淆,浪费了好多时间!!希望懂的同学能够指导本人,感激尽............ 1.jvm 和 类的关系 当 ...
- bnuoj 34985 Elegant String DP+矩阵快速幂
题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=34985 We define a kind of strings as elegant s ...