【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) ...
随机推荐
- 【BZOJ】3495: PA2010 Riddle 2-SAT算法
[题意]有n个城镇被分成了k个郡,有m条连接城镇的无向边.要求给每个郡选择一个城镇作为首都,满足每条边至少有一个端点是首都.n,m,k<=10^6. [算法]2-SAT,前后缀优化建图 [题解] ...
- python作业购物车(第二周)
一.作业需求: 1.启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 2.允许用户根据商品编号购买商品 3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 4 ...
- 巅峰极客第二场CTF部分writeup
word-MISC 微信回答问题+word字体里. sqli-WEB 注册个admin空格即可,长字符截断. 晚上把后续的写出来.现在睡觉
- 如何在LINUX中开机、登陆、退出、定时、定期自动运行程序
1.开机启动时自动运行程序 Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init.init根据配置文件继续引导过程,启动其它进程.通常情况下,修改放置在 /etc/rc或 /et ...
- WebClient vs HttpClient vs HttpWebRequest
转载:http://www.diogonunes.com/blog/webclient-vs-httpclient-vs-httpwebrequest/ Just when I was startin ...
- 简单实现JS上传图片预览功能
HTML代码 <div class="upload"> <input type="button" class="btn" ...
- ssh -o 常用选项
ssh -o ConnectTimeout=3 -o ConnectionAttempts=5 -o PasswordAuthentication=no -o StrictHostKeyCheckin ...
- java基础11 继承(super、extends关键字和重写,这三个要素出现的前提:必须存在继承关系)
面向对象的三大特征: 1.封装 (将一类属性封装起来,并提供set()和get()方法给其他对象设置和获取值.或者是将一个运算方法封装起来,其他对象需要此种做运算时,给此对象调用) 2.继承 ...
- 系统日志查看logrotate 工具
logrotate是作为linux系统日志的管理工具存在.他可以轮换,压缩,邮件系统日志文件. 默认的logrotate被加入cron的/etc/cron.daily中作为每日任务执行./etc/lo ...
- CGIC简明教程(转摘)
CGIC简明教程 本系列的目的是演示如何使用C语言的CGI库“CGIC”完成Web开发的各种要求. ********************************* 基础知识 1 ...