【分析】

  之前打的那种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】 二分图最大权匹配的更多相关文章

  1. UOJ#80. 二分图最大权匹配 模板

    #80. 二分图最大权匹配 描述 提交 自定义测试 从前一个和谐的班级,有 nlnl 个是男生,有 nrnr 个是女生.编号分别为 1,…,nl1,…,nl 和 1,…,nr1,…,nr. 有若干个这 ...

  2. uoj#80 二分图最大权匹配

    题意:给定二分图,有边权,求最大边权匹配.边权非负. 解:KM算法求解最大权完备匹配. 完备匹配就是点数少的那一边每个点都有匹配. 为了让完备匹配与最大权匹配等价,我们添加若干条0边使之成为完全二分图 ...

  3. UOJ#80 二分图最大权匹配 [模板题]

    从前一个和谐的班级,有 nlnl 个是男生,有 nrnr 个是女生.编号分别为 1,…,nl1,…,nl 和 1,…,nr1,…,nr. 有若干个这样的条件:第 vv 个男生和第 uu 个女生愿意结为 ...

  4. @noi.ac - 507@ 二分图最大权匹配

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 有一天你学了一个能解决二分图最大权匹配的算法,你决定将这个算法应 ...

  5. [ACM] HDU 2255 奔小康赚大钱 (二分图最大权匹配,KM算法)

    奔小康赚大钱 Problem Description 传说在遥远的地方有一个很富裕的村落,有一天,村长决定进行制度改革:又一次分配房子. 这但是一件大事,关系到人民的住房问题啊. 村里共同拥有n间房间 ...

  6. [hdu1533]二分图最大权匹配 || 最小费用最大流

    题意:给一个n*m的地图,'m'表示人,'H'表示房子,求所有人都回到房子所走的距离之和的最小值(距离为曼哈顿距离). 思路:比较明显的二分图最大权匹配模型,将每个人向房子连一条边,边权为曼哈顿距离的 ...

  7. POJ2195 Going Home[费用流|二分图最大权匹配]

    Going Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22088   Accepted: 11155 Desc ...

  8. Hdu2255 奔小康赚大钱(二分图最大权匹配KM算法)

    奔小康赚大钱 Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好 ...

  9. 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 ...

  10. HDU2255 奔小康赚大钱 —— 二分图最大权匹配 KM算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    ...

随机推荐

  1. Java实现链式存储的二叉树

    二叉树的定义: 二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的.分别称作这个根的左子树和右子树的二叉树组成. 二叉树的遍历方式主要 ...

  2. Stat2—主成分分析(Principal components analysis)

    最近在猛撸<R in nutshell>这本课,统计部分涉及的第一个分析数据的方法便是PCA!因此,今天打算好好梳理一下,涉及主城分析法的理论以及R实现!come on…gogogo… 首 ...

  3. win10本地搭建php运行环境

    一.下载搭建环境所需软件,安装顺序也要按照列表顺序安装 1.Vc2015(根据需要安装Vc2012或者Vc2015) Vc2015:https://www.microsoft.com/zh-CN/do ...

  4. 【leetcode 简单】第九题 移除元素

    给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...

  5. Linux下文本浏览器lynx

    一般登录到Linux上的时候都是使用Shell登录上去的,但是如果这个时候我们有浏览网页的需求怎么办,比如我刚刚部署上去一个网站,但是我并不知道我有没有部署成功,而且只能在这一台Linux上能够访问到 ...

  6. 如何通过掩码计算可用的IP数量

    假设掩码是28,28也就是28个1.本身掩码是255.255.255.255那么转换成二进制也就是 11111111,11111111,11111111,11111111 那么28个1也就是: 111 ...

  7. ThinkPHP的运行流程-2

    Thinkphp为了提高编译的效率,第一次运行的时候thinkphp会把文件全部编译到temp目录下的~runtime.php文件,在第二次运行的时候会直接读取这个文件.所以我们在线下自己写代码测试的 ...

  8. numpy 简介

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  9. shell编程===执行shell脚本的四种方法

    使用vim创建一个shell文件,命名 hello.sh #!/bin/bash echo "hello shell !" 在linux中进行加载 chmod +x ./hello ...

  10. sql server 2008 r2 产品密钥

    数据中心版:PTTFM-X467G-P7RH2-3Q6CG-4DMYBDDT3B-8W62X-P9JD6-8MX7M-HWK38==================================== ...