大致题意:
    吕布要跟曹操pk。吕布有n个小弟,曹操有m个。已知可以由k种打架的方式,每种方式都是一个吕布的小弟去虐另一个曹操的人,每种方式都有一个伤害值。而且吕布和曹操的人都只能干一架。求伤害值最少是多少。

大致思路:
    二分图最小权匹配。初始值全部取负,求出最大匹配后再将这个值取负得到的就是答案。切记tire申请空间不要太给力,被MLE到shi了。

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int nMax=404;
const int mMax=1005;
const int inf=1<<29;
int map[nMax][nMax];
int lx[nMax],ly[nMax];
int mapch[nMax];
int stack[nMax];
bool sy[nMax],sx[nMax];
int n,m,e,cnt;
int find (int u){int v,t;sx[u]=1;for(v=1;v<=m;v++){if(sy[v]) continue;t=lx[u]+ly[v]-map[u][v];if(t==0){sy[v]=1;if(mapch[v]==-1||find(mapch[v])){mapch[v]=u;return 1;}}else if(t<stack[v]) stack[v]=t;}return 0;
}
int KM(){int i,j,k,d,sum=0;cnt=0;for(i=1;i<=m;i++)ly[i]=0;memset(mapch,-1,sizeof(mapch));for(i=1;i<=n;i++){lx[i]=-inf;for(j=1;j<=m;j++)if(map[i][j]>lx[i])lx[i]=map[i][j];}for(i=1;i<=n;i++){for(j=1;j<=m;j++)stack[j]=inf;while(1){for(k=1;k<=m;k++) sy[k]=0;for(k=1;k<=n;k++) sx[k]=0;if(find(i)) break;d=inf;for(k=1;k<=m;k++)if(!sy[k]&&stack[k]<d)d=stack[k];for(k=1;k<=n;k++)if(sx[k]) lx[k]-=d;for(k=1;k<=m;k++)if(sy[k]) ly[k]+=d;else stack[k]-=d;}}for(i=1;i<=m;i++)if(mapch[i]!=-1&&map[mapch[i]][i]!=-inf){sum+=map[mapch[i]][i];}return sum;
}class nodea{
public:int id;nodea *p[65];nodea(){int i;id=-1;for(i=0;i<65;i++)p[i]=NULL;}
};
nodea *root;
int cnt1,cnt2;int getnum(char *s,int &cc){int i;nodea *r=root;int l=strlen(s);for(i=0;i<l;i++){if(r->p[s[i]-60]==NULL){r->p[s[i]-60]=new nodea();}r=r->p[s[i]-60];}if(r->id==-1){r->id=cc;cc++;}return r->id;
}int main(){int i,j,k,s,a,b;char name1[30],name2[30];while(scanf("%d%d%d",&n,&m,&k)!=EOF){cnt1=cnt2=1;root=new nodea();for(i=1;i<=n;i++){for(j=1;j<=m;j++){map[i][j]=-inf;}}while(k--){scanf("%s%s%d",name1,name2,&s);a=getnum(name1,cnt1);b=getnum(name2,cnt2);map[a][b]=-s;}printf("%d\n",-KM());}return 0;
}

[字典树+KM]hdoj 2813:One fihgt one相关推荐

  1. hdoj 1247 Hat’s Words(字典树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1247 思路分析:题目要求找出在输入字符串中的满足要求(该字符串由输入的字符串中的两个字符串拼接而成)的 ...

  2. HDOJ 1251 统计难题——第二次用字典树AC题目,写一下解题报告

    第一次用字典树+BFS的方法统计以给定字符串为前缀的单词数目,超时了.百思不得其解,然后我看了一下讨论版里的一位同学的AC代码.豁然开朗,立刻明白了求解相同前缀的单词个数的最简单的解法. 其实在建一科 ...

  3. 字典树(讲解+模版)

    又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利用字符串的公共前缀 ...

  4. 字典树基本介绍(字典树模板)

    转载自:http://www.cnblogs.com/tanky_woo/archive/2010/09/24/1833717.html 字典树(讲解+模版) 又称单词查找树,Trie树,是一种树形结 ...

  5. hdu5296 01字典树

    根据二进制建一棵01字典树,每个节点的答案等于左节点0的个数 * 右节点1的个数 * 2,遍历整棵树就能得到答案. AC代码: #include<cstdio> using namespa ...

  6. BZOJ 3483 SGU505 Prefixes and suffixes(字典树+可持久化线段树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3483 [题目大意] 给出一些串,同时给出m对前缀后缀,询问有多少串满足给出的前缀后缀模 ...

  7. 2014百度之星 Xor Sum(字典树+贪心)

    题目在HDU_OJ Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometh ...

  8. HDU6964 I love counting (字典树+莫队)

    题意: 给定一个长度为 nnn 的序列c,qc,qc,q 次询问,每次给出l,r,a,bl,r,a,bl,r,a,b求在[l,r][l,r][l,r]中有多少种不同的值 kkk 满足 k⊕a≤b​.k ...

  9. Beautiful Subarrays (01字典树 瞎搞)

    题意: 题解: 一看问的是子序列,并且还是异或. 首先想到01字典树,再一看让你求子序列的个数,大致是想让你把这个序列进行前缀异或处理后然后再01字典树上进行操作吧. 假设01字典树往左边是0右边是1 ...

最新文章

  1. BZOJ4566: [Haoi2016]找相同字符
  2. 快速开发一个PHP扩展
  3. iOS开发UI篇—核心动画简介
  4. PHP获取 当前页面名称、主机名、URL完整地址、URL参数、获取IP
  5. debian mysql开机启动_自动启动debian和lighttpd+mysql
  6. sql语句中开窗函数的使用
  7. 让皮肤变水嫩的15条小妙招 - 健康程序员,至尚生活!
  8. 循环首次适应算法_面向6G的极化编码链路自适应技术
  9. 【转】如何在编程生涯中有一个好的开端
  10. 手机安装python3.5_CentOS 7安装Python3.5
  11. c语言基础代码_全国计算机二级等级考试:C语言二级考试有多难?不看不知道...
  12. Alkman Euclidean Sequencer PRO Mac - 复合节奏音序器
  13. 全网首发:LINUX编译JNA:编译产生jna.jar
  14. Struts2+Spring3+MyBatis3整合以及Spring注解开发
  15. Matlab画图常用的指令是啥,matlab画图常用命令
  16. javaweb项目tomcat检查不到当前模型的解决方法
  17. m3 pcb开孔 螺丝_螺丝过孔工艺孔底孔尺寸参照表
  18. github中文显示乱码的解决方法
  19. Unity 纹理拆分 Alpha 通道
  20. 从程序员角度看“上帝“玩游戏

热门文章

  1. excel设置坐标轴起始值
  2. Python图像处理PIL各模块详细介绍
  3. 在Web站点中创建和使用Rss源
  4. 3D游戏设计第六次作业——打飞碟物理模式
  5. java中sum是什么_Java中的IntStream sum()方法
  6. 学以致用——Java源码——抛双骰游戏图形界面版(GUI-Based Craps Game)
  7. 《文明之光》第四章读书笔记
  8. 查询 email 域名 分组 各组条数
  9. Android完美实现录音笔记功能
  10. arch linux 无线投屏,ubuntu使用scrcpy投屏-免费神器scrcpy