bzoj1070题解
【解题思路】
考虑拆点,得到一个二分图:左边点<i,j>表示第i个技师按顺序第j辆修的车,右边点k表示第k个车主,连接左右的边表示第k个车主可能成为第i个技师的第j个客户。
因为是二分图,所以直接跑KM即可,复杂度O(n3m);或者考虑费用流,左图都和源点连边,右图都和汇点连边,容费均为1,跑个流即可,复杂度O(松)。
【参考代码】
费用流实现:
#pragma GCC optimize(2)
#include <cstdio>
#include <cstring>
#define REP(i,low,high) for(register int i=(low);i<=(high);i++)
#define INF 0x7f7f7f7f
using namespace std;
template<typename T> inline bool getmin(T &tar,const T &pat) {return pat<tar?tar=pat,:;}
const static int T=; static int E=; bool inq[T+]; int w,c,hed[T+],pre[T+],que[T<<]; long long dst[T+],tim[][];
struct edge
{
int fr,to,fl,nx; long long vl;
edge() {fl=INF;}
edge(const int &x,const int &y,const int &f,const long long &v) {fr=x,to=y,fl=f,vl=v,nx=hed[x],hed[x]=E;}
}edg[];
inline void add_edge(const int &fr,const int &to,const int &fl,const long long &vl) {edg[++E]=edge(fr,to,fl,vl),edg[++E]=edge(to,fr,,-vl);}
inline bool SPFA()
{
memset(dst,0x7f,sizeof dst),dst[]=que[]=0ll,memset(inq,,sizeof inq),inq[]=;
for(int head=-,tail=;head++<tail;)
{
int now=que[head];
for(int i=hed[now];i;i=edg[i].nx)
{
int p=edg[i].to; if(edg[i].fl&&getmin(dst[p],dst[now]+edg[i].vl)) {pre[p]=i; if(!inq[p]) inq[que[++tail]=p]=;}
}
inq[now]=;
}
return dst[T]<INF;
}
int main()
{
scanf("%d%d",&w,&c),memset(hed,,sizeof hed); REP(i,,c) REP(j,,w) scanf("%lld",&tim[j][i]); int n=w*c; long long ans=0ll;
REP(i,,n) add_edge(,i,,0ll); REP(i,,c) add_edge(n+i,T,,0ll); REP(i,,w) REP(j,,c) REP(k,,c) add_edge((i-)*c+j,n+k,,tim[i][k]*j);
while(SPFA())
{
int mnr=INF; for(int i=pre[T];i;i=pre[edg[i].fr]) getmin(mnr,edg[i].fl);
for(int i=pre[T];i;i=pre[edg[i].fr]) edg[i].fl-=mnr,edg[i^].fl+=mnr,ans+=edg[i].vl*mnr;
}
return printf("%.2lf\n",(double)ans/c),;
}
bzoj1070题解的更多相关文章
- LG2053/BZOJ1070 「SCOI2007」修车 费用流
问题描述 LG2053 BZOJ1070 题解 将\(m\)个修理工拆为\(n \times m\)个,将修理工和车辆看做二分图,连出一个完全二分图. 边流量为\(1\),费用为时间,费用流即可. \ ...
- BZOJ1070:[SCOI2007]修车——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1070 https://www.luogu.org/problemnew/show/P2053#sub ...
- 【BZOJ1070】[SCOI2007]修车
[BZOJ1070][SCOI2007]修车 题面 以后要多写题面flag 题目描述 同一时刻有\(N\)位车主带着他们的爱车来到了汽车维修中心.维修中心共有\(M\)位技术人员,不同的技术人员对不同 ...
- 【BZOJ1070】[SCOI2007]修车 费用流
[BZOJ1070][SCOI2007]修车 Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的. ...
- [bzoj1070][SCOI2007]修车_费用流
修车 bzoj-1070 SCOI-2007 题目大意:有m个人要修n台车,每个工人修不同的车的时间不同,问将所有的车都修完,最少需要花费的时间. 注释:$2\le m\le 9$,$1\le n \ ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
随机推荐
- SNAT 和 DNAT
SNAT是原地址转换,DNAT是目标地址转换. SNAT 内部地址要访问公网上的服务时,内部地址会主动发起连接,将内部地址转换成公有ip.网关这个地址转换称为SNAT 企业内部的主机A想访问互联网上的 ...
- js中如何避免动态引入重复资源
创建存储数据的数组或者对象: 每次调用方法的时候,往里面添加资源对象,包括路径: 每次调用的时候遍历此路劲是否存在,如存在,就调用此资源对象的promise进行操作. 可避免资源未加载完成就执行的情况 ...
- 命令行窗口编译执行java
1:首先配置java环境变量 新建系统环境变量 名称:JAVA_HOME 内容:D:\Program Files\Java\jdk1.7.0_13 为你jdk所在的文件夹位置 修改path路径 ...
- 分布式锁实现(一):Redis
前言 单机环境下我们可以通过JAVA的Synchronized和Lock来实现进程内部的锁,但是随着分布式应用和集群环境的出现,系统资源的竞争从单进程多线程的竞争变成了多进程的竞争,这时候就需要分布式 ...
- xshell本地上传文件到Ubuntu上及从Ubuntu上下载文件到本地
1.第一种方法是最常用的 :如果下载了Xshell和Xftp,Ctrl+Alt+F就可以选择文件的互传了!(虚拟机/云服务器通用)--只要相互间能ping得通. 2.第二种方法 :ubuntu环境下安 ...
- vs code的简单插件
Auto Close Tag VSCode Color Info Mithril Emmet support for VS Code Open HTML in Default Browser open ...
- vscode 编写Python走过的坑
1,在使用vscode 中import turtle 这个模块, 再调用t = turtle.Pen(),始终提示无法找到turtle模块 2.可是使用terminal 中调用turtle模块,没有问 ...
- 浏览器HTTP协议请求头信息
通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息.客户端向服务器发送一个请求,请求头包含请求的方法.URI.协议版本.以及包含请求修饰符.客户信息和内容的类似于MIME的消息结构 ...
- Xen的体系结构
1. BIOS的虚拟化 xen的启动过程,与x86系统一样,首先要进入保护模式,然后安装中断处理程序. xen的中断处理程序可以分为几种,有的是直接分发给正在运行的操作系统,有的是分发给安装了硬件驱动 ...
- Ibatis sql语句1
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE sqlMap PUBLIC "-/ ...