HDU 2813
http://acm.hdu.edu.cn/showproblem.php?pid=2813
裸二分图最优匹配,需要用两个map把武将名字映射到点的序号上
#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
using namespace std;
const int N=;
const int INF=0x3f3f3f3f;
int nx,ny;
int linker[N],lx[N],ly[N],slack[N];
int visx[N],visy[N],w[N][N];
int DFS(int x)
{
visx[x]=;
for(int y=;y<=ny;y++){
if(visy[y])
continue;
int tmp=lx[x]+ly[y]-w[x][y];
if(tmp==){
visy[y]=;
if(linker[y]==- || DFS(linker[y])){
linker[y]=x;
return ;
}
}else if(slack[y]>tmp){
slack[y]=tmp;
}
}
return ;
}
int KM()
{
int i,j;
memset(linker,-,sizeof(linker));
memset(ly,,sizeof(ly));
for(i=;i<=nx;i++)
for(j=,lx[i]=-INF;j<=ny;j++)
if(w[i][j]>lx[i])
lx[i]=w[i][j];
for(int x=;x<=nx;x++){
for(i=;i<=ny;i++)
slack[i]=INF;
while(){
memset(visx,,sizeof(visx));
memset(visy,,sizeof(visy));
if(DFS(x))
break;
int d=INF;
for(i=;i<=ny;i++)
if(!visy[i] && d>slack[i])
d=slack[i];
for(i=;i<=nx;i++)
if(visx[i])
lx[i]-=d;
for(i=;i<=ny;i++)
if(visy[i])
ly[i]+=d;
else
slack[i]-=d;
}
}
int res=;
for(i=;i<=ny;i++)
if(linker[i]!=-)
res+=w[linker[i]][i];
return res;
}
int main()
{
int n,m,k ;
while(~scanf("%d%d%d",&n,&m,&k))
{
nx=n;ny=m;
for(int i= ;i<N ;i++)
for(int j= ;j<N ;j++)
w[i][j]=-INF ;
int p1=,p2= ;
map <string,int> mp1,mp2 ;
for(int i= ;i<k ;i++)
{
char a[],b[] ;
int v ;
scanf("%s%s%d",a,b,&v) ;
string s1(a),s2(b) ;
if(!mp1[s1])mp1[s1]=p1++ ;
if(!mp2[s2])mp2[s2]=p2++ ;
w[mp1[s1]][mp2[s2]]=-v ;
}
int ans=KM();
printf("%d\n",-ans);
}
return ;
}
HDU 2813的更多相关文章
- 【转载】图论 500题——主要为hdu/poj/zoj
转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- hdu图论题目分类
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...
- HDU图论题单
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
- HDU 1796How many integers can you find(容斥原理)
How many integers can you find Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d ...
随机推荐
- Seafile 文件访问日志时间不一致问题
修改/seafile-server-latest/seahub/seahub/setting.py # Local time zone for this installation. Choices c ...
- django模型的元数据Meta
模型的元数据,指的是“除了字段外的所有内容”,例如排序方式.数据库表名.人类可读的单数或者复数名等等.所有的这些都是非必须的,甚至元数据本身对模型也是非必须的.但是,我要说但是,有些元数据选项能给予你 ...
- json 与 string 互转
1. json字符串转换成json对象 js: JSON.parse('{"age":"28"}') eval('(' + '{"age": ...
- linux c/c++ 删除文件
linux c/c++ 删除文件 #include <stdio.h> int FileRemove(const char* fname) { return remove(fname); ...
- 554C - Kyoya and Colored Balls
554C - Kyoya and Colored Balls 思路:组合数,用乘法逆元求. 代码: #include<bits/stdc++.h> using namespace std; ...
- socket+django
1.socket 网络上任意两个程序之间要进行通信,需要依靠socket(端口).socket封装了TCP/IP协议,让网络通信基于TCP/IP协议的形式实现. socket可以翻译为插座,那么一个服 ...
- English trip -- Review Unit 9 Daily living 日常生活
主要讲了一个时态:现在进行时 Be动词+Ving 需要记住的有6种规律 1.直接单词后面 + ing e.g. watch -> watching 2.是ie结尾的单词,变y ...
- 求逆序数的方法--线段树法&归并排序法
逆序数的概念:对于n个不同的元素,先规定各元素之间有一个标准次序(例如n个 不同的自然数,可规定从小到大为标准次序),于是在这n个元素的任一排列中,当某两个元素的先后次序与标准次序不同时,就说有1个逆 ...
- php--------返回404状态
php header()返回404状态代码的两种方式 //方式一 header('HTTP/1.1 404 Not Found');exit('404') //方式二 header("sta ...
- 原生js实现选项卡
html代码: <div class="tab"> <ul> <li class="selected">图片</li& ...