HDU 2813 One fihgt one map+最大匹配值
来源:互联网 发布:ant运行java文件 编辑:程序博客网 时间:2024/05/21 07:40
点击打开链接
One fihgt one
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1968 Accepted Submission(s): 638
Total Submission(s): 1968 Accepted Submission(s): 638
Problem Description
Lv Bu and his soldiers are facing a cruel war——Cao Cao had his best generals just miles away.
There’s little time , but Lv Bu is unaware of how to arrange his warriors , what he know is that he have n brave generals while Cao Cao has m , and he has k fights to choose from , he’d like to make all his n warriors participate in the battle but get the least injuries . Lv Bu is happy because there is always a good solution . So , now is your task to tell Lv Bu the least injuries his troop would get.
No one could take part in two fights.
There’s little time , but Lv Bu is unaware of how to arrange his warriors , what he know is that he have n brave generals while Cao Cao has m , and he has k fights to choose from , he’d like to make all his n warriors participate in the battle but get the least injuries . Lv Bu is happy because there is always a good solution . So , now is your task to tell Lv Bu the least injuries his troop would get.
No one could take part in two fights.
Input
Multiple cases. For each case ,there are three integers in the first line , namely n,m (1<=n<=m<=200)and k (n<=k<=m*n).
The next k lines are the information about k possible fights , for each line are two strings (no more than 20 characters ) and an integer. The first string indicates Lv Bu’s general and the second , of course , Cao Cao’s , and the integer is the injury Lv Bu’s general would get if this fight were chosen.
The next k lines are the information about k possible fights , for each line are two strings (no more than 20 characters ) and an integer. The first string indicates Lv Bu’s general and the second , of course , Cao Cao’s , and the integer is the injury Lv Bu’s general would get if this fight were chosen.
Output
One integer , the least injuries Lv Bu’s generals would get.
Sample Input
2 3 5LvBu ZhangFei 6LvBu GuanYu 5LvBu XuChu 4ZhangLiao ZhangFei 8ZhangLiao XuChu 3
Sample Output
8
Author
shǎ崽
Source
HDU 1st “Old-Vegetable-Birds Cup” Programming Open Contest
Recommend
lcy
题意是说吕布要和曹操打仗,吕布手下有n元大将,曹操手下有m元大将,有k场战役,每场战役吕布派一名大将跟曹操的一名大将单挑,并且给你耗血量,让你求吕布军所有大将耗血量最低。
二分匹配求最大匹配值,用map来标记,968秒过。
题意是说吕布要和曹操打仗,吕布手下有n元大将,曹操手下有m元大将,有k场战役,每场战役吕布派一名大将跟曹操的一名大将单挑,并且给你耗血量,让你求吕布军所有大将耗血量最低。
二分匹配求最大匹配值,用map来标记,968秒过。
#include<stdio.h>#include<string.h>#include<string>#include<map>#define M 207#define inf 1<<30using namespace std;int lx[M],ly[M],g[M][M];int slack[M],match[M];bool visx[M],visy[M];int n,m,k;bool dfs(int cur){ visx[cur]=true; for(int y=1; y<=m; y++) { if(!visy[y]&&lx[cur]+ly[y]==g[cur][y]) { visy[y]=true; if(match[y]==-1||dfs(match[y])) { match[y]=cur; return true; } }// else if(slack[y]>t)// slack[y]=t; } return false;}void KM(){ memset(match,-1,sizeof(match)); memset(ly,0,sizeof(ly)); for(int i=1; i<=n; i++) { lx[i]=-inf; for(int j=1; j<=m; j++) lx[i]=max(lx[i],g[i][j]); } for(int x=1; x<=n; x++) {// for(int i=1; i<=m; i++)// slack[i]=inf; while(true) { memset(visx,false,sizeof(visx)); memset(visy,false,sizeof(visy)); if(dfs(x))break; int d=inf; for(int j=1;j<=n;j++) if(visx[j]) { for(int k=1;k<=m;k++) { if(!visy[k]&&d>lx[j]+ly[k]-g[j][k]) { d=lx[j]+ly[k]-g[j][k]; } } }// for(int i=1; i<=m; i++)// if(!visy[i]&&d>slack[i])// d=slack[i];// if(d==inf)return ; for(int i=1; i<=n; i++) if(visx[i]) lx[i]-=d; for(int i=1; i<=m; i++) if(visy[i]) ly[i]+=d;// else// slack[i]-=d; } }}int main(){ //freopen("in.txt","r",stdin); while(scanf("%d%d%d",&n,&m,&k)!=EOF) { char s1[22],s2[22]; int a,num1=1,num2=1; for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) g[i][j]=-inf; map<string,int>mp1,mp2; for(int i=1; i<=k; i++) { scanf("%s%s%d",s1,s2,&a); if(!mp1[s1]) { mp1[s1]=num1++; } if(!mp2[s2]) { mp2[s2]=num2++; } g[mp1[s1]][mp2[s2]]=-a; } KM(); int result=0; for(int i=1; i<=m; i++) { if(match[i]!=-1&&g[match[i]][i]!=-inf) result+=g[match[i]][i]; } printf("%d\n",-result); } return 0;}
- HDU 2813 One fihgt one map+最大匹配值
- HDU 2813 One fihgt one(KM最大匹配)
- One fihgt one hdu 2813 map+二分图最优匹配+KM快速模板
- HDU-2813 One fihgt one【二分图最优匹配】
- hdu 2813 One fihgt one【KM 最小匹配】
- HDU 2813 One fihgt one(KM算法解决最小权值匹配)
- hdu 2813 One fihgt one【KM+STLmap】
- HDU 2813 One fihgt one KM水题
- HDU 2813 One fihgt one(KM算法)
- HDOJ 2813 - One fihgt one KM求最小权最大匹配..
- hdu 2813 One fihgt one(二分图最小权匹配KM)
- 2813 One fihgt one //MaxMatch
- HDU 2282 Chocolate & HDU 2813 One fihgt one
- HDU2813One fihgt one(KM匹配)
- hdu 2813 One fihgt one(trie树+KM算法)
- HDU 2813 One fihgt one KM小变形
- One fihgt one
- hdu2813One fihgt one(KM)
- 深入浅出理解索引结构
- hdu 4422——The Little Girl who Picks Mushrooms
- Hibernate的ID生成策略——Hibernate学习笔记03
- 在ubuntu 12.04上安裝Redmine
- HDU-2159 fate 二维背包
- HDU 2813 One fihgt one map+最大匹配值
- POJ 3020 最小路径覆盖 = 顶点数-最大匹配数 二分匹配
- js延时执行一个方法
- QT图片缩放
- java.sql.BatchUpdateException
- 手把手教你把Vim改装成一个IDE编程环境(图文)
- 输出50个小星星
- 第二次评审总结及2013.10.18~2013.10.31开发计划
- sunPKCS11加载动态库(转)