poj 2112 最优挤奶方案
| Time Limit: 2000MS | Memory Limit: 30000K | |
| Total Submissions: 16550 | Accepted: 5945 | |
| Case Time Limit: 1000MS | ||
Description
Each milking point can "process" at most M (1 <= M <= 15) cows each day.
Write a program to find an assignment for each cow to some milking machine so that the distance the furthest-walking cow travels is minimized (and, of course, the milking machines are not overutilized). At least one legal assignment is possible for all input data sets. Cows can traverse several paths on the way to their milking machine.
Input
* Lines 2.. ...: Each of these K+C lines of K+C space-separated integers describes the distances between pairs of various entities. The input forms a symmetric matrix. Line 2 tells the distances from milking machine 1 to each of the other entities; line 3 tells the distances from machine 2 to each of the other entities, and so on. Distances of entities directly connected by a path are positive integers no larger than 200. Entities not directly connected by a path have a distance of 0. The distance from an entity to itself (i.e., all numbers on the diagonal) is also given as 0. To keep the input lines of reasonable length, when K+C > 15, a row is broken into successive lines of 15 numbers and a potentially shorter line to finish up a row. Each new row begins on its own line.
Output
Sample Input
2 3 2
0 3 2 1 1
3 0 3 2 0
2 3 0 1 0
1 2 1 0 2
1 0 0 2 0
Sample Output
2
Source
Main.cpp
xlocale(1242) : fatal error C1088: Cannot flush compiler intermediate file: '_CL_75c8ace5ex': No space left on device
”磁盘空间不足,但是就懵了,尝试了N次才发现,我的智商啊!!!!
1 Source Code
2 #include<cstdio>
3 #include<iostream>
4 #include<cstring>
5 #include<vector>
6 #include<queue>
7
8 using namespace std;
9 int k,c,m,ans;
10 int map[240][240];
11 int tu[240][240];
12 int lays[240];
13 int vis[240];
14 void floyd()
15 {
16 for(int kk=1;kk<=k+c;kk++)
17 for(int i=1;i<=k+c;i++)
18 for(int j=1;j<=k+c;j++)
19 if(map[i][kk]+map[kk][j]<map[i][j])
20 map[i][j]=map[i][kk]+map[kk][j];
21 }
22 void mideg(int mid)
23 {
24 memset(tu,0,sizeof(tu));
25 for(int i=1;i<=k;i++)
26 {
27 tu[0][i]=m;
28 map[0][i]=1;
29 }
30 for(int i=1;i<=k;i++)
31 {
32 for(int j=k+1;j<=k+c;j++)
33 if(map[i][j]<=mid)
34 tu[i][j]=1;
35 }
36 for(int i=k+1;i<=k+c;i++)
37 {
38 tu[i][k+c+1]=1;
39 map[i][k+c+1]=1;
40 }
41 }
42 bool bfs()
43 {
44 memset(lays,-1,sizeof(lays));
45 queue<int>q;
46 q.push(0);
47 lays[0]=0;
48 while(!q.empty())
49 {
50 int u=q.front();
51 q.pop();
52 for(int i=0;i<=k+c+1;i++)
53 {
54 if(tu[u][i]>0&&lays[i]==-1)
55 {
56 lays[i]=lays[u]+1;
57 if(i==k+c+1)return 1;
58 else q.push(i);
59 }
60 }
61 }
62 return 0;
63 }
64 bool dinic()
65 {
66 int maxf=0;
67 vector<int>q;
68 while(bfs())
69 {
70 memset(vis,0,sizeof(vis));
71 q.push_back(0);
72 vis[0]=1;
73 while(!q.empty())
74 {
75 int nd=q.back();
76 if(nd==k+c+1)
77 {
78 int minn,minx=0x7fffffff;
79 for(int i=1;i<q.size();i++)
80 {
81 int u=q[i-1],v=q[i];
82 if(minx>tu[u][v])
83 {
84 minx=tu[u][v];
85 minn=u;
86 }
87 }
88 maxf+=minx;
89 for(int i=1;i<q.size();i++)
90 {
91 int u=q[i-1],v=q[i];
92 tu[u][v]-=minx;
93 tu[v][u]+=minx;
94 }
95 while(!q.empty()&&q.back()!=minn)
96 {
97 vis[q.back()]=0;
98 q.pop_back();
99 }
100 }
101 else
102 {
103 int i;
104 for(i=0;i<=k+c+1;i++)
105 {
106 if(tu[nd][i]>0&&!vis[i]&&lays[i]==lays[nd]+1)
107 {
108 q.push_back(i);
109 vis[i]=1;
110 break;
111 }
112 }
113 if(i>k+c+1)q.pop_back();
114 }
115 }
116 }
117 return maxf==c;
118 }
119 int main()
120 {
121
122 cin>>k>>c>>m;
123 memset(map,0x3f,sizeof(map));
124 for(int i=1;i<=k+c;i++)
125 for(int j=1;j<=k+c;j++)
126 {
127 int a;
128 scanf("%d",&a);
129 if(a)map[i][j]=a;
130 if(i==j)map[i][j]=0;
131 }
132
133 floyd();
134
135 int l=0,r=50000;
136 while(l<=r)
137 {
138 int mid=(l+r)/2;
139 mideg(mid);
140 bool pd=dinic();
141 if(pd)
142 {
143 ans=mid;
144 r=mid-1;
145 }
146 else
147 l=mid+1;
148 }
149 cout<<ans<<endl;
150 return 0;
151 }
poj 2112 最优挤奶方案的更多相关文章
- 题解 最优的挤奶方案(Optimal Milking)
最优的挤奶方案(Optimal Milking) 时间限制: 1 Sec 内存限制: 128 MB 题目描述 农场主 John 将他的 K(1≤K≤30)个挤奶器运到牧场,在那里有 C(1≤C≤20 ...
- POJ 2112 Optimal Milking (二分 + floyd + 网络流)
POJ 2112 Optimal Milking 链接:http://poj.org/problem?id=2112 题意:农场主John 将他的K(1≤K≤30)个挤奶器运到牧场,在那里有C(1≤C ...
- POJ 2112—— Optimal Milking——————【多重匹配、二分枚举答案、floyd预处理】
Optimal Milking Time Limit:2000MS Memory Limit:30000KB 64bit IO Format:%I64d & %I64u Sub ...
- Poj 2112 Optimal Milking (多重匹配+传递闭包+二分)
题目链接: Poj 2112 Optimal Milking 题目描述: 有k个挤奶机,c头牛,每台挤奶机每天最多可以给m头奶牛挤奶.挤奶机编号从1到k,奶牛编号从k+1到k+c,给出(k+c)*(k ...
- POJ 2112 Optimal Milking (二分 + 最大流)
题目大意: 在一个农场里面,有k个挤奶机,编号分别是 1..k,有c头奶牛,编号分别是k+1 .. k+c,每个挤奶机一天最让可以挤m头奶牛的奶,奶牛和挤奶机之间用邻接矩阵给出距离.求让所有奶牛都挤到 ...
- POJ 2112 Optimal Milking (二分+最短路径+网络流)
POJ 2112 Optimal Milking (二分+最短路径+网络流) Optimal Milking Time Limit: 2000MS Memory Limit: 30000K To ...
- P3097 [USACO13DEC]最优挤奶Optimal Milking
P3097 [USACO13DEC]最优挤奶Optimal Milking 题意简述:给定n个点排成一排,每个点有一个点权,多次改变某个点的点权并将最大点独立集计入答案,输出最终的答案 感谢@zht4 ...
- 洛谷P3097 - [USACO13DEC]最优挤奶Optimal Milking
Portal Description 给出一个\(n(n\leq4\times10^4)\)个数的数列\(\{a_n\}(a_i\geq1)\).一个数列的最大贡献定义为其中若干个不相邻的数的和的最大 ...
- Optimal Milking POJ - 2112 (多重最优匹配+最小费用最大流+最大值最小化 + Floyd)
Optimal Milking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 19347 Accepted: 690 ...
随机推荐
- 《中间件性能挑战赛--分布式统计和过滤的链路追踪》java 选手分享
2020年6月份天池举办的<中间件性能挑战赛>可谓是异常激烈,本人抽业余时间报名参与,感受比赛惨烈的同时,也有诸多感慨哈,总结一个多月的赛程,多少有一些心得与大家分享 本文原创地址:htt ...
- vue项目中的路由守卫
路由守卫的意义就相当于一个保安一样,作用很大,在实际的项目中运用也是不少,也就是当客户在登陆自己账号的时候,有可能存在客户有啥事的时候,自己后台或者pc的关闭全部浏览器,没有点击退出登录,或者在退出登 ...
- 上传功能-弹窗实现-vue
-引入弹窗页面 import fileUpload from 'src/page/cuApplyManage/fileUpload.vue'; -页面布局 <div> <fileUp ...
- try catch finally语句块中存在return语句时的执行情况剖析
2种场景 (1) try中有return,finally中没有return(注意会改变返回值的情形);(2) try中有return,finally中有return; 场景代码分析(idea亲测) 场 ...
- 【JDBC核心】实现 CRUD 操作
实现 CRUD 操作 操作和访问数据库 数据库连接被用于向数据库服务器发送命令和 SQL 语句,并接受数据库服务器返回的结果.其实一个数据库连接就是一个 Socket 连接. java.sql 包中有 ...
- Flutter 基础组件:Widget简介
概念 在Flutter中几乎所有的对象都是一个Widget.与原生开发中"控件"不同的是,Flutter中的Widget的概念更广泛,它不仅可以表示UI元素,也可以表示一些功能性的 ...
- MySQL查询优化之 index 索引的分类和使用
索引的分类 主键索引 (PRIMARY KEY) 唯一的标识符, 主键不可重复, 只能有一列作为主键 唯一索引 (Unique KEY) 避免重复的列出现, 唯一索引可以重复, 多个列都可以标识为唯一 ...
- [翻译]Azure 网关迁移至 .NET Core 3.1 性能提升一倍
原文:[Azure Active Directory's gateway is on .NET Core 3.1!] Azure Active Directory 的网关服务是一个反向代理,它为构成 ...
- 【Linux】扩大swap分区
今天安装oracle的时候,提示我swap分区过小.需要最少3g以上 但是安装系统了,想要扩大swap分区怎么办呢 下面来介绍如何扩大swap分区 按步骤介绍 Red Hat linux 如何增加sw ...
- ctfshow—pwn10
格式化字符串漏洞 具体什么是格式化字符串请大家参考如下文章 https://wiki.x10sec.org/pwn/fmtstr/fmtstr_intro/ printf函数格式化输出符号及详细说明 ...