洛谷 P2053 [SCOI2007]修车(最小费用最大流)
题解
最小费用最大流
n和m是反着的
首先,
\]
其中,\(k\)为它在当前技术人员那里,排倒数第\(k\)个修
我们可以对于每个技术人员进行拆点,
对于每个技术人员的各个点,表示倒数第几次修
然后每个人连向技术人员,显然花费是根据连的点来算的
然后就是二分图带权最小匹配了
我只会Dinic
Code
#include<bits/stdc++.h>
#define LL long long
#define RG register
using namespace std;
template<class T> inline void read(T &x) {
x = 0; RG char c = getchar(); bool f = 0;
while (c != '-' && (c < '0' || c > '9')) c = getchar(); if (c == '-') c = getchar(), f = 1;
while (c >= '0' && c <= '9') x = x*10+c-48, c = getchar();
x = f ? -x : x;
return ;
}
template<class T> inline void write(T x) {
if (!x) {putchar(48);return ;}
if (x < 0) x = -x, putchar('-');
int len = -1, z[20]; while (x > 0) z[++len] = x%10, x /= 10;
for (RG int i = len; i >= 0; i--) putchar(z[i]+48);return ;
}
int n, m;
const int N = 1010;
struct node {
int to, nxt, w, v;
}g[2000000];
int last[N], gl = 1;
void add(int x, int y, int w, int v) {
g[++gl] = (node) {y, last[x], w, v};
last[x] = gl;
g[++gl] = (node) {x, last[y], 0, -v};
last[y] = gl;
}
int dis[N], s, t, pre[N], from[N];
bool vis[N];
queue<int> q;
bool spfa() {
memset(dis, 127, sizeof(dis));
q.push(s);
dis[s] = 0;
while (!q.empty()) {
int u = q.front(); q.pop();
// printf("u = %d\n", u);
for (int i = last[u]; i; i = g[i].nxt) {
int v = g[i].to;
if (g[i].w && dis[v] > dis[u]+g[i].v) {
dis[v] = dis[u]+g[i].v;
from[v] = i; pre[v] = u;
if (!vis[v]) {
vis[v] = 1;
q.push(v);
}
}
}
vis[u] = 0;
}
// printf("%d\n", dis[t]);
return dis[t] != dis[0];
}
int Mcmf() {
int ans = 0;
while (spfa()) {
ans += dis[t];
for (int i = t; i != s; i = pre[i])
g[from[i]].w--, g[from[i]^1].w++;
}
return ans;
}
int a[70][10];
int main() {
//freopen(".in", "r", stdin);
//freopen(".out", "w", stdout);
read(m), read(n);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
read(a[i][j]);
for (int k = 1; k <= m; k++)//第k个技术人员
for (int i = 1; i <= n; i++)//第i个顾客
for (int j = 1; j <= n; j++)//倒数第j个修理
add(n*m+i, (k-1)*n+j, 1, j*a[i][k]);
s = n*m+n+1, t = s+1;
for (int i = n*m+1; i < s; i++)
add(s, i, 1, 0);
for (int i = 1; i <= n*m; i++)
add(i, t, 1, 0);
printf("%.2lf\n", Mcmf()*1.0/n);
return 0;
}
洛谷 P2053 [SCOI2007]修车(最小费用最大流)的更多相关文章
- 洛谷 P2053 [SCOI2007]修车 解题报告
P2053 [SCOI2007]修车 题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术 ...
- BZOJ1070[SCOI2007]修车——最小费用最大流
题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待 ...
- 洛谷 P4015 运输问题 【最小费用最大流+最大费用最大流】
s向仓库i连ins(s,i,a[i],0),商店向t连ins(i+m,t,b[i],0),商店和仓库之间连ins(i,j+m,inf,c[i][j]).建两次图分别跑最小费用最大流和最大费用最大流即可 ...
- 洛谷 P4014 分配问题 【最小费用最大流+最大费用最大流】
其实KM更快--但是这道题不卡,所以用了简单粗暴的费用流,建图非常简单,s向所有人连流量为1费用为0的边来限制流量,所有工作向t连流量为1费用为0的边,然后对应的人和工作连(i,j,1,cij),跑一 ...
- BZOJ 1070: [SCOI2007]修车 [最小费用最大流]
1070: [SCOI2007]修车 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 4936 Solved: 2032[Submit][Status] ...
- 【洛谷 p3381】模板-最小费用最大流(图论)
题目:给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 解法:在Dinic的基础下做spfa算法. 1 #include<cst ...
- [bzoj1070] [洛谷P2053] [SCOI2007] 修车
Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同 的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序, ...
- 洛谷 P2053 [SCOI2007]修车
题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待 ...
- 洛谷$P2053\ [SCOI2007]$修车 网络流
正解:网络流 解题报告: 传送门$QwQ$ 一个很妙的建图,,,说实话我麻油想到$QwQ$ 考虑对每个工人建$n$个点,表示这是他修的倒数第$i$辆车,就可以算出影响是$t\cdot i$,然后对每辆 ...
随机推荐
- STM32F4通用定时器
1.基本原理 三种定时器区别 通用定时器功能特点描述 在这里只用输入捕获事件也能获取脉冲个数同时可以只使用它来获取脉冲宽度,比如当捕获到上升沿,马上进入中断,把计数器的值置零,然后等待捕获下降沿的到来 ...
- 3.1.7 线程阻塞工具类:LockSupport
package 第三章.线程阻塞工具LockSupport; import java.util.concurrent.locks.LockSupport; /** * Created by zzq o ...
- sublime 3插件安装记录
安装sublime 3的package control管理器: 从菜单 View - Show Console 或者 ctrl + ~ 快捷键,调出 console.将以下 Python 代码粘贴进去 ...
- $.each()与$(selector).each()区别
jQuery.each( collection, callback(indexInArray, valueOfElement) )可用于迭代任何集合,无论是“名/值”对象(JavaScript对象)或 ...
- Eclipse快捷键和练习题(倒叙,排序)
1 快捷键 内容辅助键 Alt+/ 自动补齐main方法 main 然后 Alt+/ 自动补齐输出语句 syso 然后 Alt+/ 格式化Ctrl+Shift+f 代码区域右键 -- So ...
- Alpha冲刺(八)
Information: 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Details: 组员1(组长)柯奇豪 过去两天完成了哪些任务 进一步优化代码,结合自己负责的部分修 ...
- SQL语句统计错误率
2018年的第一篇博客就以此作为开端吧 :D 最近在项目中碰到需要统计类似错误率之类的需求,原本这功能是之前做的,但是最近测的时候发现出了点问题,显示的结果不对.这就比较尴尬了... 于是就进行deb ...
- modelsim使用常见问题及解决办法集锦③
四.You selected Modelsim-Altera as Simulation Software in EDA Tool Settings,however…… You selected Mo ...
- 9、Semantic-UI之标题
9.1 定义基础的标题样式 在Semantic-UI中定义了5种标题样式,h1~h5. 示例:基础样式定义 <h1 class="ui header">一级标题&l ...
- Time 模块中asctime()、time()、localtime()、ctime()、gmtime()的用法
Time 模块包含了以下内置函数,既有时间处理的,也有转换时间格式的: time.asctime([tupletime]) 接受时间元组并返回一个可读的形式“Tue Dec 11 18:07:14 2 ...