wikioi 1028 花店橱窗布置 最大权匹配
中文题意不描述。
链接:http://wikioi.com/problem/1028/
这题一开始很裸的最大权二分匹配。但是原来没有接触过,KM的这个最大权不大会。然后一开始以为用最大费用最大流直接就能搞,后来知道单纯的费用流解决的是二分最佳匹配,而不是最大权,QCMM然后看了一下这个http://hi.baidu.com/lerroy312/item/42e718ba58a1f8df85dd795f
结果改了之后不对,不知道为什么最后用的最小费用,对边的权值取负值,结果取负值才过。。。不解。。。
#include <iostream>
#include <queue>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
const int maxn = ;
const int inf = ;
struct node
{
int u,v,cap,flow,cost,next;
}edges[];
int head[maxn],cnt;
void init(int n)
{
int i;
for(i = ;i <= n;i++)
head[i] = -;
cnt = ; return ;
}
void addedge(int u,int v,int cap,int cost)
{
edges[cnt].u = u;
edges[cnt].v = v;
edges[cnt].cap = cap;
edges[cnt].flow = ;
edges[cnt].cost = cost;
edges[cnt].next = head[u];
head[u] = cnt;
cnt++;
edges[cnt].u = v;
edges[cnt].v = u;
edges[cnt].cap = ;
edges[cnt].flow = ;
edges[cnt].cost = -cost;
edges[cnt].next = head[v];
head[v] = cnt;
cnt++;
}
int vis[maxn],a[maxn],pre[maxn],dis[maxn];
int spfa(int s,int t,int n,int &flow,int &cost)
{
int i;
queue<int> q;
for(i = ;i <= n ;i++)
dis[i] = inf,vis[i] = ; dis[s] = ;
pre[s] = ;
vis[s] = ;
a[s] = inf; int u,v;
q.push(s); while(!q.empty())
{
u = q.front();
q.pop();
vis[u] = ; for(i = head[u];i != -;i = edges[i].next)
{
struct node & e = edges[i]; v = e.v;
if(e.cap > e.flow &&dis[v] > dis[u]+e.cost)
{
dis[v] = dis[u]+e.cost;
a[v] = min(a[u],e.cap-e.flow);
pre[v] = i;
if(!vis[v])
{
vis[v] = ;
q.push(v);
}
}
}
} if(dis[t] >= inf)
return ;
flow+= a[t];
cost += dis[t]*a[t];
u = t;
while(u != s)
{
edges[pre[u]].flow += a[t];
edges[pre[u]^].flow -= a[t];
u = edges[pre[u]].u;
}
return ;
}
int mcmf(int s,int t, int n)
{
int cost = ,flow = ;
while(spfa(s,t,n,flow,cost)); return cost;
}
int main()
{
int n,m;
scanf("%d %d",&n,&m); int i,j;
init(n+m+);
for(i =;i <= n;i++)
{
addedge(,i,,);
for(j = ;j <= m;j++)
{
int w;
scanf("%d",&w);
addedge(i,j+n,,-w);
}
addedge(i,m+n+,,);
}
addedge(n+m+,m+n+,n,);
for(j = ;j <= m;j++)
addedge(j+n,m+n+,,);
cout<<-mcmf(,m+n+,m+n+)<<endl;
return ;
}
额,最近跟scu-frog神请教了下这个问题,scu-frog神看了下代码,说你的最长路的初始化有问题,有负权边为什么赋值-1.
然后默默对自己说了一句sb。。。默默改了交了一下,ac= =。
#include <iostream>
#include <queue>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
const int maxn = ;
const int inf = ;
struct node
{
int u,v,cap,flow,cost,next;
}edges[];
int head[maxn],cnt;
void init(int n)
{
int i;
for(i = ;i <= n;i++)
head[i] = -;
cnt = ; return ;
}
void addedge(int u,int v,int cap,int cost)
{
edges[cnt].u = u;
edges[cnt].v = v;
edges[cnt].cap = cap;
edges[cnt].flow = ;
edges[cnt].cost = cost;
edges[cnt].next = head[u];
head[u] = cnt;
cnt++;
edges[cnt].u = v;
edges[cnt].v = u;
edges[cnt].cap = ;
edges[cnt].flow = ;
edges[cnt].cost = -cost;
edges[cnt].next = head[v];
head[v] = cnt;
cnt++;
}
int vis[maxn],a[maxn],pre[maxn],dis[maxn];
int spfa(int s,int t,int n,int &flow,int &cost)
{
int i;
queue<int> q;
for(i = ;i <= n ;i++)
dis[i] = -inf,vis[i] = ; dis[s] = ;
pre[s] = ;
vis[s] = ;
a[s] = inf; int u,v;
q.push(s); while(!q.empty())
{
u = q.front();
q.pop();
vis[u] = ; for(i = head[u];i != -;i = edges[i].next)
{
struct node & e = edges[i]; v = e.v;
if(e.cap > e.flow &&dis[v] < dis[u]+e.cost)
{
dis[v] = dis[u]+e.cost;
a[v] = min(a[u],e.cap-e.flow);
pre[v] = i;
if(!vis[v])
{
vis[v] = ;
q.push(v);
}
}
}
} if(dis[t] <= -inf)
return ;
flow+= a[t];
cost += dis[t]*a[t];
u = t;
while(u != s)
{
edges[pre[u]].flow += a[t];
edges[pre[u]^].flow -= a[t];
u = edges[pre[u]].u;
}
return ;
}
int mcmf(int s,int t, int n)
{
int cost = ,flow = ;
while(spfa(s,t,n,flow,cost)); return cost;
}
int main()
{
int n,m;
scanf("%d %d",&n,&m); int i,j;
init(n+m+);
for(i =;i <= n;i++)
{
addedge(,i,,);
for(j = ;j <= m;j++)
{
int w;
scanf("%d",&w);
addedge(i,j+n,,w);
}
addedge(i,m+n+,,);
}
addedge(n+m+,m+n+,n,);
for(j = ;j <= m;j++)
addedge(j+n,m+n+,,);
cout<<mcmf(,m+n+,m+n+)<<endl;
return ;
}
wikioi 1028 花店橱窗布置 最大权匹配的更多相关文章
- codevs 1028 花店橱窗布置
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 假设以最美观的方式布置花店的橱窗,有F束花,V个花瓶,我们用美学值(一个整 ...
- codevs 1028 花店橱窗布置 (KM)
/*裸地KM*/ #include<iostream> #include<cstdio> #include<cstring> #define maxn 110 #d ...
- codevs 1028 花店橱窗布置 KM算法
题目链接 n个花, m个花瓶, 每个花放到一个花瓶里会产生一个值w[i][j], 一个花只能放到一个花瓶里, 一个花瓶只能放一个花, 求产生的最大值. 带权二分图模板. #include <io ...
- [IOI1999]花店橱窗布置(DP路径记录)
题目:[IOI1999]花店橱窗布置 问题编号:496 题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V ...
- 洛谷P1854 花店橱窗布置 分析+题解代码
洛谷P1854 花店橱窗布置 分析+题解代码 蒟蒻的第一道提高+/省选-,纪念一下. 题目描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定 ...
- RQNOJ PID496/[IOI1999]花店橱窗布置
PID496 / [IOI1999]花店橱窗布置 ☆ 题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序 编号 ...
- 【2018寒假集训 Day2】【2019.5.11更新】【动态规划】花店橱窗布置(FLOWER)
花店橱窗布置(FLOWER) 提交文件名:flower 问题描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号, ...
- codevs1028花店橱窗布置(费用流)
这几天刚学了费用流,找到了这道题来练一练手. 题目: 题目描述 Description 假设以最美观的方式布置花店的橱窗,有F束花,V个花瓶,我们用美学值(一个整数)表示每束花放入每个花瓶所产生的美学 ...
- 【codevs1028】花店橱窗布置(费用流)
这几天刚学了费用流,找到了这道题来练一练手. 题目: 题目描述 Description 假设以最美观的方式布置花店的橱窗,有F束花,V个花瓶,我们用美学值(一个整数)表示每束花放入每个花瓶所产生的美学 ...
随机推荐
- 用Python实现的数据结构与算法:堆栈
一.概述 堆栈(Stack)是一种后进先出(LIFO)的线性数据结构,对堆栈的插入和删除操作都只能在栈顶(top)进行. 二.ADT 堆栈ADT(抽象数据类型)一般提供以下接口: Stack() 创建 ...
- SVM引入拉格朗日乘子[转载]
转自:https://zhidao.baidu.com/question/494249074914968332.html SVM使用拉格朗日乘子法更为高效地求解了优化问题. SVM将寻找具有最大几何间 ...
- JDK eclipse selenium的安装以及环境变量的配置
未经允许,禁止转载!!! 未经允许,禁止转载!!! 首先下载安装JDK: 然后双击进行安装 选着第一个:开发工具!点击next 一定要记住:Install to: C:\Program Files\ ...
- Django-models进阶
Django-models进阶 extra extra(select=None, where=None, params=None, tables=None, order_by=None, select ...
- 6.2 Controllers -- Representing Multipe Models
1. 一个controller的model可以代表几个记录也可以代表单个.这里,路由的model hook返回一个歌曲数组: app/routes/songs.js export default Em ...
- Linux系统——搭建FTP方式的本地定制化Yum仓库
(1)搭建公网源yum仓库 安装wget aliyun源 # wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epe ...
- Codeforces Round #513 by Barcelona Bootcamp
A. Phone Numbers 签. #include <bits/stdc++.h> using namespace std; #define N 110 char s[N]; ], ...
- CCPC-Wannafly Winter Camp Day3 (Div2, onsite)
Replay Dup4: 没想清楚就动手写? 写了两百行发现没用?想的还是不够仔细啊. 要有莽一莽的精神 X: 感觉今天没啥输出啊, 就推了个公式?抄了个板子, 然后就一直自闭A. 语文差,题目没理解 ...
- Android ActionBar自定义
关于自定义的ActionBar的实现过程,这里做下笔记以供之后查看. 1.默认状态 使用Android Studio新建一个名为“ActionBar”的应用,默认actionbar如图(1)所示. 图 ...
- springcloud9----feign-client-without-hystrix
package com.itmuch.cloud; import org.springframework.boot.SpringApplication; import org.springframew ...