洛谷$P2053\ [SCOI2007]$修车 网络流
正解:网络流
解题报告:
一个很妙的建图,,,说实话我麻油想到$QwQ$
考虑对每个工人建$n$个点,表示这是他修的倒数第$i$辆车,就可以算出影响是$t\cdot i$,然后对每辆车和这$n\cdot m$个节点连边,跑个费用流就做完辣$QwQ$
具体港下怎么建图$QwQ$?
就考虑建两排点,左侧是$n\cdot m$个点表示工人,右侧是$n$个点表示车.然后$S$和工人之间连流量为1费用为0的边,工人和车连流量为1费用为$t\cdot i$的边,车和$T$连流量为1费用为0的边
然后就欧克了?$QwQ$
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define lf double
#define gc getchar()
#define t(i) edge[i].to
#define w(i) edge[i].wei
#define fy(i) edge[i].fy
#define ri register int
#define rb register bool
#define rc register char
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define e(i,x) for(ri i=head[x];~i;i=edge[i].nxt) const int N=1e5+;
int head[N],ed_cnt=-,vis[N],S,T,fr_ed[N],fr_nod[N],dis[N],n,m,as;
struct ed{int to,nxt,wei,fy;}edge[N<<];
struct node{int x,y;}nod[N]; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il int nam(ri x,ri y){return (x-)*n+y;}
il void ad(ri x,ri y,ri z,ri p)
{
//printf("%d -> %d : %d , %d\n",y,x,z,p);
edge[++ed_cnt]=(ed){x,head[y],z,p};head[y]=ed_cnt;edge[++ed_cnt]=(ed){y,head[x],,-p};head[x]=ed_cnt;}
il bool spfa()
{
queue<int>Q;Q.push(S);memset(vis,,sizeof(vis));vis[S]=;memset(dis,,sizeof(dis));dis[S]=;
while(!Q.empty())
{
ri nw=Q.front();Q.pop();vis[nw]=;
e(i,nw)
if(w(i) && fy(i)+dis[nw]<dis[t(i)])
{dis[t(i)]=dis[nw]+fy(i),fr_ed[t(i)]=i,fr_nod[t(i)]=nw;if(!vis[t(i)])Q.push(t(i)),vis[t(i)]=;}
}
if(dis[T]==dis[T+])return ;
//printf("dep[T]=%d\n",dep[T]);
ri flow=dis[T+];
for(ri i=T;i!=S;i=fr_nod[i])flow=min(flow,w(fr_ed[i]));
for(ri i=T;i!=S;i=fr_nod[i])w(fr_ed[i])-=flow,w(fr_ed[i]^)+=flow;as+=dis[T]*flow;
return ;
} int main()
{
//freopen("2053.in","r",stdin);freopen("2053.out","w",stdout);
memset(head,-,sizeof(head));m=read();n=read();S=,T=n*m+n+;
rp(j,,m)rp(i,,n)ad(nam(j,i),S,,);rp(i,,n)ad(T,n*m+i,,);
rp(i,,n)rp(j,,m){ri t=read();rp(k,,n)ad(n*m+i,nam(j,k),,t*k);}
while(spfa());printf("%.2lf\n",(lf)as/n);
return ;
}
洛谷$P2053\ [SCOI2007]$修车 网络流的更多相关文章
- 洛谷 P2053 [SCOI2007]修车 解题报告
P2053 [SCOI2007]修车 题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术 ...
- [bzoj1070] [洛谷P2053] [SCOI2007] 修车
Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同 的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序, ...
- 洛谷 P2053 [SCOI2007]修车(最小费用最大流)
题解 最小费用最大流 n和m是反着的 首先, \[ ans = \sum{cost[i][j]}*k \] 其中,\(k\)为它在当前技术人员那里,排倒数第\(k\)个修 我们可以对于每个技术人员进行 ...
- 洛谷 P2053 [SCOI2007]修车
题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待 ...
- P2053 [SCOI2007]修车(费用流)
P2053 [SCOI2007]修车 顾客平均等待的最小时间$=$等待总时间$/n$ 考虑只有1个技术人员时,$n$辆车等待总时间 $A_1+(A_1+A_2)+(A_1+A_2+A_3)+...+\ ...
- 洛谷P2053 修车
修车修到jiry报废(滑稽) 题意:m个人修n个车,同时开始. 每辆车只能给一个人修.每个人修每辆车的用时都不同. 问怎样安排能使每辆车的等待时间总和最少. 解: 一直想的是用以流量表示一个人,没想到 ...
- P2053 [SCOI2007]修车
思路 很妙的网络流题目 最开始我简单的想直接把n个车的点和m个人员的点直接用cap=t(i,j)的边连起来,显然是假的,因为没有考虑到车主等待的时间长度 然后考虑分析将\(w_1,w_2,\dots, ...
- 洛谷P1251 餐巾(网络流)
P1251 餐巾 15通过 95提交 题目提供者该用户不存在 标签网络流贪心 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 为什么我全部10个测试点都对… 题目描述 一个餐厅在相继的N天里 ...
- 3150luogu洛谷
若说代码 那真的是很水 但是 思想却有点意思 这道题是洛谷博弈论专题的第一道入门题, 然而刚开始我是不会做的, 毕竟是道入门题, 我博弈论还没入门呢. 这道题的做法就是: 如果m为偶数, 那么先手赢( ...
随机推荐
- 2019南昌网络赛-I. Yukino With Subinterval 线段树套树状数组,CDQ分治
TMD...这题卡内存卡的真优秀... 所以以后还是别用主席树的写法...不然怎么死的都不知道... 树套树中,主席树方法开权值线段树...会造成空间的浪费...这道题内存卡的很紧... 由于树套树已 ...
- iptables 操作规则
iptables -nL查看本机关于iptables的设置情况,默认查看的是-t filter,可以指定-t nat iptables-save > iptables.rule会保存当前的防火墙 ...
- [学习笔记]整体DP
问题: 有一些问题,通常见于二维的DP,另一维记录当前x的信息,但是这一维过大无法开下,O(nm)也无法通过. 但是如果发现,对于x,在第二维的一些区间内,取值都是相同的,并且这样的区间是有限个,就可 ...
- H3C PPP显示与调试
- Oracle备库宕机启动解决方案
简介 ORA-10458: standby database requires recovery ORA-01196: 文件 1 由于介质恢复会话失败而不一致 ORA-01110: 数据文件 1: ' ...
- 《代码整洁之道 中文版》高清 PDF 电子书下载
代码整洁之道.PDF 下载 代码整洁之道.PDF 中文版 高清 PDF 电子书下载 代码整洁之道下载 点我下载 作者简介 · · · · · · Robert C. Martin,Object ...
- css 百分比继承关系的探讨
引入:近日在回顾css基础的时候发现了一个有趣的问题,就是css在继承百分比类属性的时候是继承百分比后再根据父级宽高计算,还是继承父级根据百分比计算过后的绝对值.下面举一个简单的例子来描述这一个问题, ...
- H3C IGP与EGP
- linux进程简单睡眠
当一个进程睡眠, 它这样做以期望某些条件在以后会成真. 如我们之前注意到的, 任何睡 眠的进程必须在它再次醒来时检查来确保它在等待的条件真正为真. Linux 内核中睡眠的 最简单方式是一个宏定义, ...
- 搭建zookeeper出现错误:starting zookeeper... already running process 2853
今天搭建zookeeper时碰到了starting zookeeper already running process 2853这样一个错误. 上网上查了几个相似的问题都是要删除zookeeper_s ...