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 ...
随机推荐
- Elasticsearch索引生命周期管理方案
一.前言 在 Elasticsearch 的日常中,有很多如存储 系统日志.行为数据等方面的应用场景,这些场景的特点是数据量非常大,并且随着时间的增长 索引 的数量也会持续增长,然而这些场景基本上只有 ...
- ArrayList的删除姿势你都知道了吗
引言 前几天有个读者由于看了<ArrayList哪种遍历效率最好,你真的弄明白了吗?>问了个问题普通for循环ArrayList为什么不能删除连续重复的两个元素?其实这个描述是不正确的.正 ...
- MySQL中的排序
在编写SQL 语句时常常会用到 order by 进行排序,那么排序过程是什么样的?为什么有些排序执行比较快,有些排序执行很慢?又该如何去优化? 索引排序 索引排序指的是在通过索引查询时就完成了排序, ...
- 四元数和旋转(Quaternion & rotation)
四元数和旋转(Quaternion & rotation) 本篇文章主要讲述3D空间中的旋转和四元数之间的关系.其中会涉及到矩阵.向量运算,旋转矩阵,四元数,旋转的四元数表示,四元数表示的旋转 ...
- ZooKeeper集群“脑裂”
ZooKeeper 集群节点为什么要部署成奇数ZooKeeper 容错指的是:当宕掉几个ZooKeeper节点服务器之后,剩下的个数必须大于宕掉的个数,也就是剩下的节点服务数必须大于n/2,这样Zoo ...
- shell脚本学习之6小时搞定(1)
shell脚本学习之6小时搞定(1) 简介 Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本. Unix/Linux上常见的Shell脚本解释器有bash.sh.csh.ksh等,习惯上把 ...
- 自定义 简单 底部tab
项目地址:https://gitee.com/jielov/music-netease-api.git 先创建三个页面 分别为 home.vue , classify.vue, my.vue . 以下 ...
- PPT 转 word
可以wps 直接转 打开wps 在页面里直接点击右键 可以导出wps
- i5 11300H和i5 10300H 的区别
i5-11300H 为 4 核 8 线程,主频 3.1GHz,睿频 4.4GHz,三级缓存 8MB 选 i5-11300H还是i5 10300h 这些点很重要!看完你就知道了https://list. ...
- WebApi 中请求的 JSON 数据字段作为 POST 参数传入
使用 POST 方式请求 JSON 数据到服务器 WebAPI 接口时需要将 JSON 格式封装成数据模型接收参数.即使参数较少,每个接口仍然需要单独创建模型接收.下面方法实现了将 JSON 参数中的 ...