【UOJ 80】 二分图最大权匹配
【分析】
之前打的那种KM会TLE。。。
why??明明说n^3的啊?
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
#define Maxn 410
#define Maxm 160010
// #define INF 0x7fffffff
#define LL long long
const LL INF=1LL<<; LL mymin(LL x,LL y) {return x<y?x:y;}
LL mymax(LL x,LL y) {return x>y?x:y;} int N; int n,m;
int match[Maxn],op[Maxn];
LL eg[Maxn][Maxn],lx[Maxn],ly[Maxn],slack[Maxn];
int visx[Maxn],visy[Maxn],pre[Maxn]; void mh(int y)
{
for(int x,z;y>;y=z)
{
x=pre[y];z=op[x];
op[x]=y;match[y]=x;
}
} int nt;
void ffind(int st)
{
for(int i=;i<=N;i++) slack[i]=INF;
queue<int> q;nt++;
q.push(st);visx[st]=nt;
while ()
{
while(!q.empty())
{
int x=q.front();q.pop();
for(int y=;y<=N;y++)
if(visy[y]!=nt)
{
if(lx[x]+ly[y]==eg[x][y])
{
pre[y]=x;
if(!match[y]) {mh(y);return;}
q.push(match[y]);
visx[match[y]]=nt;visy[y]=nt;
}
else if(slack[y]>lx[x]+ly[y]-eg[x][y])
slack[y]=lx[x]+ly[y]-eg[x][y],pre[y]=x;
}
}
LL delta=INF;
for(int y=;y<=N;y++) if(visy[y]!=nt) delta=mymin(delta,slack[y]);
for(int i=;i<=N;i++)
{
if(visx[i]==nt) lx[i]-=delta;
if(visy[i]==nt) ly[i]+=delta;
else slack[i]-=delta;
}
for(int i=;i<=N;i++) if(visy[i]!=nt&&slack[i]==)
{
if(!match[i]) {mh(i);return;}
q.push(match[i]);
visx[match[i]]=nt;visy[i]=nt;
}
}
} LL KM()
{
memset(visx,,sizeof(visx));
memset(visy,,sizeof(visy));
for (int i=;i<=N;i++) lx[i]=ly[i]=,op[i]=match[i]=;
for (int i=;i<=N;i++)
for (int j=;j<=N;j++)
lx[i]=mymax(lx[i],eg[i][j]);
for (int i=;i<=N;i++) ffind(i);
} void output()
{
LL ans=;
for(int i=;i<=N;i++) ans+=lx[i]+ly[i];
printf("%lld\n",ans);
for(int i=;i<=n;i++) if(eg[i][op[i]]!=) printf("%d ",op[i]);
else printf("0 ");printf("\n");
} void init()
{
int l;
memset(eg,,sizeof(eg));
scanf("%d%d%d",&n,&m,&l);
for(int i=;i<=l;i++)
{
int x,y;
LL c;
scanf("%d%d%lld",&x,&y,&c);
eg[x][y]=mymax(eg[x][y],c);
}
N=mymax(n,m);
} int main()
{
init();
KM();
output();
return ;
}
【UOJ 80】 二分图最大权匹配的更多相关文章
- UOJ#80. 二分图最大权匹配 模板
#80. 二分图最大权匹配 描述 提交 自定义测试 从前一个和谐的班级,有 nlnl 个是男生,有 nrnr 个是女生.编号分别为 1,…,nl1,…,nl 和 1,…,nr1,…,nr. 有若干个这 ...
- uoj#80 二分图最大权匹配
题意:给定二分图,有边权,求最大边权匹配.边权非负. 解:KM算法求解最大权完备匹配. 完备匹配就是点数少的那一边每个点都有匹配. 为了让完备匹配与最大权匹配等价,我们添加若干条0边使之成为完全二分图 ...
- UOJ#80 二分图最大权匹配 [模板题]
从前一个和谐的班级,有 nlnl 个是男生,有 nrnr 个是女生.编号分别为 1,…,nl1,…,nl 和 1,…,nr1,…,nr. 有若干个这样的条件:第 vv 个男生和第 uu 个女生愿意结为 ...
- @noi.ac - 507@ 二分图最大权匹配
目录 @description@ @solution@ @accepted code@ @details@ @description@ 有一天你学了一个能解决二分图最大权匹配的算法,你决定将这个算法应 ...
- [ACM] HDU 2255 奔小康赚大钱 (二分图最大权匹配,KM算法)
奔小康赚大钱 Problem Description 传说在遥远的地方有一个很富裕的村落,有一天,村长决定进行制度改革:又一次分配房子. 这但是一件大事,关系到人民的住房问题啊. 村里共同拥有n间房间 ...
- [hdu1533]二分图最大权匹配 || 最小费用最大流
题意:给一个n*m的地图,'m'表示人,'H'表示房子,求所有人都回到房子所走的距离之和的最小值(距离为曼哈顿距离). 思路:比较明显的二分图最大权匹配模型,将每个人向房子连一条边,边权为曼哈顿距离的 ...
- POJ2195 Going Home[费用流|二分图最大权匹配]
Going Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22088 Accepted: 11155 Desc ...
- Hdu2255 奔小康赚大钱(二分图最大权匹配KM算法)
奔小康赚大钱 Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好 ...
- POJ2195 Going Home (最小费最大流||二分图最大权匹配) 2017-02-12 12:14 131人阅读 评论(0) 收藏
Going Home Description On a grid map there are n little men and n houses. In each unit time, every l ...
- HDU2255 奔小康赚大钱 —— 二分图最大权匹配 KM算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) ...
随机推荐
- 【POJ】3070 Fibonacci
[算法]矩阵快速幂 [题解] 根据f[n]=f[n-1]+f[n-2],可以构造递推矩阵: $$\begin{vmatrix}1 & 1\\ 1 & 0\end{vmatrix} \t ...
- 【洛谷P1597】语句解析
题目背景 木有背景…… 题目描述 一串(<255)PASCAL语言,只有a,b,c 3个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,未赋值的变量值为0.输出a,b,c 最终的值. ...
- CSS Sprite笔记
1. 什么是CSS Sprite 将一些碎小的图片拼接为一张大点的图片来使用,目的是为了减少浏览器的http请求次数以提高网页的加载速度.每次请求图片都需要跟服务器建立一次连接,并且浏览器的最大并发请 ...
- jquery 生成二维码
jquery的二维码生成插件qrcode,在页面中调用该插件就能生成对应的二维码 <!DOCTYPE html> <html> <head> <meta ch ...
- Redis—初探Redis
一.什么是Redis? 学习Redis最好的是看官网了,下面是Redis的官网对Redis的介绍 可见,Redis是一个内存存储的数据结构服务器,可以用作数据库.缓存等.支持的数据结构也很丰富,有字符 ...
- PHP 结合实例认识 Socket
一.简介 (本部分参考自 揭开Socket的神秘面纱 - 源码工作室) 请结合下图 Socket 抽象层的位置来理解.Socket 是应用层和 TCP/IP 协议族进行通信的中间软件抽象层,是一组接口 ...
- atoll()函数使用注意事项及分析
atoll是c99标准加入的函数,在编译的时候可能要打开C99标准的编译选项 -std=c99. 另外,必须包含stdlib.h头文件,否则会出错. ☞ C程序代码如下所示: #include < ...
- 【Learn】CSS定义
CSS基础语法 本文用于介绍CSS相关的知识,用于记录自己的学习笔记.由于我已经熟悉了部分的HTML,所以相关的概念也不在这里进行描述了,直接写自己的一些心得感悟. 1.CSS规则 CSS是由两个主要 ...
- web deploy 安装失败解决
单独运行安装包,提示脚本运行失败. VS安装提示解包失败. 解决:检查Windows Management Instrumentation服务状态.需要非禁用.
- Python+Selenium 自动化实现实例-获取测试对象的Css属性
#coding:utf-8 '''获取测试对象的css属性场景 当你的测试用例纠结细枝末节的时候,你就需要通过判断元素的css属性来验证你的操作是否达到了预期的效果.比如你可以通过判断页面上的标题字号 ...