1070: [SCOI2007]修车
/*一开始以为是个贪心 发现自己太naive了将每个技术工人拆成n个点,一共拆n*m个,第i个表示倒数第i次修车。 让每辆车向拆出来的点连边,费用为tmp[i][j]*k,i是技工,j是车,k是拆出来的第几个点, 这样设置费用的原因是j是i倒数第k个修的,那么i修的后k个车都要等倒数第k个车。 然后跑最小费用最大流就可以了 */#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<queue> using namespace std;inline int read() {char c=getchar();int num=0;for(;!isdigit(c);c=getchar());for(;isdigit(c);c=getchar())num=num*10+c-'0';return num; }const int N=65; const int M=2e5+5;int m,n,S,T; int tim[N][N]; long long ans;int head[M],num_edge; struct Edge {int v,nxt,flow,cost; }edge[M];inline void add_edge(int u,int v,int flow,int cost) {edge[++num_edge].v=v;edge[num_edge].flow=flow;edge[num_edge].cost=cost;edge[num_edge].nxt=head[u];head[u]=num_edge;edge[++num_edge].v=u;edge[num_edge].flow=0;edge[num_edge].cost=-cost;edge[num_edge].nxt=head[v];head[v]=num_edge; }int dis[M]; queue<int> que; bool inque[M]; bool spfa() {memset(dis,0x3f,sizeof(dis));que.push(S),dis[S]=0;int now;while(!que.empty()){now=que.front(),que.pop();for(int i=head[now],v;i;i=edge[i].nxt){if(edge[i].flow==0)continue;v=edge[i].v;if(dis[v]>dis[now]+edge[i].cost){dis[v]=dis[now]+edge[i].cost;if(!inque[v]){que.push(v);inque[v]=1;}}}inque[now]=0;}return dis[T]!=0x3f3f3f3f; }int vis[M],visf; int dfs(int u,int flow) {if(u==T||!flow)return flow;int outflow=0;vis[u]=visf;for(int i=head[u],v,tmp;i;i=edge[i].nxt){if(!edge[i].flow)continue;v=edge[i].v;if(vis[v]!=visf&&dis[v]==dis[u]+edge[i].cost){tmp=dfs(v,min(flow,edge[i].flow));if(!tmp)continue;ans+=1ll*tmp*edge[i].cost;edge[i].flow-=tmp;edge[i^1].flow+=tmp;flow-=tmp;outflow+=tmp;if(!flow){vis[u]=0;return outflow;}}}vis[u]=0;dis[u]=0x7fffffff;return outflow; }int main() {num_edge=1;m=read(),n=read();T=n+n*m+1;for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)tim[j][i]=read();for(int i=1;i<=n;++i)add_edge(S,i,1,0);for(int i=1,p;i<=m;++i){for(int j=1;j<=n;++j){p=i*n+j;add_edge(p,T,1,0);for(int c=1;c<=n;++c)add_edge(c,p,1,tim[i][c]*j);}}while(spfa()){++visf;dfs(S,0x7fffffff);}printf("%.2lf",1.0*ans/n);return 0; }
转载于:https://www.cnblogs.com/lovewhy/p/9633745.html
1070: [SCOI2007]修车相关推荐
- 【BZOJ】1070: [SCOI2007]修车
1070: [SCOI2007]修车 Description 同 一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需 ...
- BZOJ 1070: [SCOI2007]修车(最小费用最大流)
建图很神奇..建完图其实就是裸的费用流了.. -------------------------------------------------------------- #include<cs ...
- BZOJ 1070: [SCOI2007]修车
1070: [SCOI2007]修车 Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要 ...
- [BZOJ 1070][SCOI2007]修车(费用流)
Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使 ...
- BZOJ 1070: [SCOI2007]修车(费用流)
http://www.lydsy.com/JudgeOnline/problem.php?id=1070 题意: 思路: 神奇的构图. 因为排在后面的人需要等待前面的车修好,这里将每个技术人员拆成n个 ...
- bzoj 1070: [SCOI2007]修车【最小费用最大流】
一开始从客人角度想的,怎么建都不对 从一个修车工所接待的所有顾客花费的总时间来看,设一共有x个人,那么第一个修的对总时间的贡献是x*w1,第二个是(x-1)*w2-以此类推.所以把第i个修车工拆成n组 ...
- luogu P2053 [SCOI2007]修车(费用流提前计算)
P2053 [SCOI2007]修车 要求平均时间最短,就等同于要求总时间最短. 一个人维修所花的时间,对同一位技术人员之后维修造成的影响是已知且固定的.那么,我们将费用提前计算.即将第 i 位车主的 ...
- luogu P2053 [SCOI2007]修车
P2053 [SCOI2007]修车 题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术 ...
- bzoj1070: [SCOI2007]修车 网络流
bzoj1070: [SCOI2007]修车 Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同 的车进行维修所用的时间是不同的 ...
最新文章
- python语言标号_Python 编码为什么那么蛋疼?
- python和javascript哪个好_JavaScript与Python:主要区别
- 准确率、召回率、F1、mAP、ROC、AUC
- 带你读AI论文:基于Transformer的直线段检测
- python2.7初学(〇)
- @Autowired与@Resource用法
- Microsoft Excel设置单元格下拉框的方法
- centos下nginx安装和配置
- HarmoneyOS鸿蒙系统零代码编程入门
- SQLyog安装使用教程
- u盘linux启动盘制作ultraiso,U+启动:利用UltraISO制作启动U盘,引导DOS系统
- linux tomcat 验证码无法显示
- python做一个网页多少钱_网站建设平台_
网站建设多少钱_
_做一个企业网站需要多少钱_64岁的Python之父表示退休后太无聊 正式加入微软...
- teambition/tower/team@osc/worktile团队协作工具价格比较
- 不安装Office操作Excel文件(.xlsx)
- IOS仿[自选股]项目开发
- OneNote 与 OneNote 2016 有什么区别?
- 如何高逼格的操作电脑打开软件(文件)Win+R高效启动软件
- 我眼中的光明·第三周
- 使用 Fiddler 进行 iOS APP 的 HTTP/HTTPS 抓包
热门文章
- STM32开发板入门教程(十三) - SPI模式读写SD卡
- 如何使用eclipse进行嵌入式Linux的开发
- cmake-gui出错解决方法
- 脉冲多普勒雷达_是人类还是动物? 多普勒脉冲雷达和神经网络的目标分类
- 康美药业财务造假给股民造成的损失,股民该怎么办?
- 纽约时代广场广告费才7千元每天,花钱装逼值不值?
- react登录页面_React 实现路由拦截
- 假设以带头结点的循环链表表示队列_关于反转链表,看这一篇就够了!
- php array 如何访问,php – 如何访问$array [@key]值
- jtextpane设置不能选中_在Bridge cc中不能使用camera raw 的编辑功能,解决方法