NC24370 [USACO 2012 Dec S]Milk Routing
题目
题目描述
Farmer John's farm has an outdated network of M pipes (1 <= M <= 500) for pumping milk from the barn to his milk storage tank. He wants to remove and update most of these over the next year, but he wants to leave exactly one path worth of pipes intact, so that he can still pump milk from the barn to the storage tank.
The pipe network is described by N junction points (1 <= N <= 500), each of which can serve as the endpoint of a set of pipes. Junction point 1 is the barn, and junction point N is the storage tank. Each of the M bi-directional pipes runs between a pair of junction points, and has an associated latency (the amount of time it takes milk to reach one end of the pipe from the other) and capacity (the amount of milk per unit time that can be pumped through the pipe in steady state). Multiple pipes can connect between the same pair of junction points.
For a path of pipes connecting from the barn to the tank, the latency of the path is the sum of the latencies of the pipes along the path, and the capacity of the path is the minimum of the capacities of the pipes along the path (since this is the "bottleneck" constraining the overall rate at which milk can be pumped through the path). If FJ wants to send a total of X units of milk through a path of pipes with latency L and capacity C, the time this takes is therefore L + X/C.
Given the structure of FJ's pipe network, please help him select a single path from the barn to the storage tank that will allow him to pump X units of milk in a minimum amount of total time.
输入描述
Line 1: Three space-separated integers: N M X (1 <= X <= 1,000,000).
Lines 2..1+M: Each line describes a pipe using 4 integers: I J L C.
I and J (1 <= I,J <= N) are the junction points at both ends
of the pipe. L and C (1 <= L,C <= 1,000,000) give the latency
and capacity of the pipe.
输出描述
- Line 1: The minimum amount of time it will take FJ to send milk
along a single path, rounded down to the nearest integer.
示例1
输入
3 3 15
1 2 10 3
3 2 10 2
1 3 14 1
输出
27
说明
INPUT DETAILS:
FJ wants to send 15 units of milk through his pipe network. Pipe #1
connects junction point 1 (the barn) to junction point 2, and has a latency
of 10 and a capacity of 3. Pipes #2 and #3 are similarly defined.
OUTPUT DETAILS:
The path 1->3 takes 14 + 15/1 = 29 units of time. The path 1->2->3 takes
20 + 15/2 = 27.5 units of time, and is therefore optimal.
题解
知识点:枚举,最短路。
每个管道有两个参数,延迟 \(L\) 和能力 \(C\) ,一条路径的时间花费是 \(\sum L_i + \frac{X}{\min(C_i)}\) ,显然路径上所有管道的 \(C\) 要尽可能大而 \(L\) 要尽可能小。然而,单看 \(L\) 尽可能小,最短路就能解决,但是另一个参数 \(C\) 就不确定了,而且没有办法兼顾两个参数。因此,我们要想办法确定一个参数。
我们已经知道 \(L\) 很好跑最短路,而 \(C\) 没有什么好的办法,那么我们手动控制 \(C\) 。枚举 \(C\) 的大小,每次固定一个 \(C\) 控制跑最短路时选取的管道,小于 \(C\) 的不选,最终取时间最小值即可。
当然也可以二分 \(C\) 不过这里枚举就能过了。
时间复杂度 \(O(\max(C_i)(n+m)\log m)\)
空间复杂度 \(O(n+m)\)
代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
template<class T>
struct Graph {
struct edge {
int v, nxt;
T w;
};
int idx;
vector<int> h;
vector<edge> e;
Graph(int n, int m) :idx(0), h(n + 1), e(m + 1) {}
void init(int n) {
idx = 0;
h.assign(n + 1, 0);
}
void add(int u, int v, T w) {
e[++idx] = edge{ v,h[u],w };
h[u] = idx;
}
};
const int N = 507, M = 507 << 1;
Graph<pair<int, int>> g(N, M);
int n, m, x;
int dis[N];
bool vis[N];
struct node {
int v, w;
friend bool operator<(const node &a, const node &b) {
return a.w > b.w;
}
};
priority_queue<node> pq;
void dijkstra(int st, int val) {
for (int i = 1;i <= n;i++) dis[i] = 0x3f3f3f3f, vis[i] = 0;
dis[st] = 0;
pq.push({ st,0 });
while (!pq.empty()) {
int u = pq.top().v;
pq.pop();
if (vis[u]) continue;
vis[u] = 1;
for (int i = g.h[u];i;i = g.e[i].nxt) {
int v = g.e[i].v;
auto [l, c] = g.e[i].w;
if (c < val) continue;
if (dis[v] > dis[u] + l) {
dis[v] = dis[u] + l;
pq.push({ v,dis[v] });
}
}
}
}
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n >> m >> x;
int mx = 0;
for (int i = 1;i <= m;i++) {
int u, v, l, c;
cin >> u >> v >> l >> c;
g.add(u, v, { l,c });
g.add(v, u, { l,c });
mx = max(mx, c);
}
int ans = 0x3f3f3f3f;
for (int i = mx;i >= 1;i--) {
dijkstra(1, i);
ans = min(ans, (int)round(dis[n] + x / i));
}
cout << ans << '\n';
return 0;
}
NC24370 [USACO 2012 Dec S]Milk Routing的更多相关文章
- 【BZOJ】【1717】【USACO 2006 Dec】Milk Patterns产奶的模式
后缀数组 o(︶︿︶)o 唉傻逼了一下,忘了把后缀数组的字典范围改回20001,直接21交了上去,白白RE了两发……sigh 既然要找出现了K次的子串嘛,那当然要用后缀数组了>_>(因为我 ...
- USACO Milk Routing
洛谷 P3063 [USACO12DEC]牛奶的路由Milk Routing 洛谷传送门 JDOJ 2334: USACO 2012 Dec Silver 3.Milk Routing JDOJ传送门 ...
- USACO翻译:USACO 2013 DEC Silver三题
USACO 2013 DEC SILVER 一.题目概览 中文题目名称 挤奶调度 农场航线 贝西洗牌 英文题目名称 msched vacation shuffle 可执行文件名 msched vaca ...
- USACO翻译:USACO 2014 DEC Silver三题
USACO 2014 DEC SILVER 一.题目概览 中文题目名称 回程 马拉松 奶牛慢跑 英文题目名称 piggyback marathon cowjog 可执行文件名 piggyback ma ...
- USACO翻译:USACO 2012 FEB Silver三题
USACO 2012 FEB SILVER 一.题目概览 中文题目名称 矩形草地 奶牛IDs 搬家 英文题目名称 planting cowids relocate 可执行文件名 planting co ...
- USACO翻译:USACO 2012 JAN三题(2)
USACO 2012 JAN(题目二) 一.题目概览 中文题目名称 叠干草 分干草 奶牛联盟 英文题目名称 stacking baleshare cowrun 可执行文件名 stacking bale ...
- USACO翻译:USACO 2012 JAN三题(1)
USACO 2012 JAN(题目一) 一.题目概览 中文题目名称 礼物 配送路线 游戏组合技 英文题目名称 gifts delivery combos 可执行文件名 gifts delivery c ...
- 【USACO 2012 Open】Running Laps(树状数组)
53 奶牛赛跑 约翰有 N 头奶牛,他为这些奶牛准备了一个周长为 C 的环形跑牛场.所有奶牛从起点同时起跑,奶牛在比赛中总是以匀速前进的,第 i 头牛的速度为 Vi.只要有一头奶牛跑完 L 圈之后,比 ...
- [USACO 2017 Dec Gold] Tutorial
Link: USACO 2017 Dec Gold 传送门 A: 为了保证复杂度明显是从终结点往回退 结果一开始全在想优化建边$dfs$……其实可以不用建边直接$multiset$找可行边跑$bfs$ ...
- 洛谷 P3063 [USACO12DEC]牛奶的路由Milk Routing
P3063 [USACO12DEC]牛奶的路由Milk Routing 题目背景 征求翻译.如果你能提供翻译或者题意简述,请直接发讨论,感谢你的贡献. 题目描述 Farmer John's farm ...
随机推荐
- Blazor开发小游戏?趁热打铁上!!!
大家好,我是沙漠尽头的狼. 网站使用Blazor重构上线一天了,用Blazor开发是真便捷,空闲时间查查gpt和github,又上线一个 正则表达式在线验证工具 和几个在线小游戏,比如 井字棋游戏.扫 ...
- 【Gui-Guider】安装后运行模拟器报 JAVA 错误
运行模拟器出错 上述错误是因为需要JAVA环境 JAVA 环境下载网址 https://www.oracle.com/java/technologies/javase-jdk16-downloads. ...
- 如何部署两个JMS网关,形成双机热备
大家使用JMS的过程中,可能会留意到,不管是微服务在注册时,还是RemoteClient构造时,所指向的网关都是一个NetAddress数组,之所以网关地址是多个,而不是一个,那是因为网关是一个双击热 ...
- [转帖]【linux命令学习】— sar 命令学习
https://blog.csdn.net/u013332124/article/details/101075521 一.命令使用介绍 sar命令全称 System Activity Report,它 ...
- [转帖]SQL SERVER中隐式转换的一些细节浅析
https://www.cnblogs.com/kerrycode/p/5853257.html 其实这是一篇没有技术含量的文章,精通SQL优化的请绕道.这个缘起于在优化一个SQL过程中,同事问了我一 ...
- [转帖]Export Prometheus metrics from SQL queries
https://github.com/albertodonato/query-exporter query-exporter is a Prometheus exporter which allows ...
- Nginx双层域名时 iframe嵌入/跳转页面的处理过程
Nginx双层域名时 iframe嵌入/跳转页面的处理过程 背景 两年前在上一家公司内遇到一个Nginx的问题 当时的场景是 双层nginx代理时(一层域名侧, 一层拆分微服务的网关层) 程序里面会打 ...
- [转帖]Kafka 与RocketMQ 落盘机制比较
https://www.jianshu.com/p/fd50befccfdd 引言 前几期的评测中,我们对比了Kafka和RocketMQ的吞吐量和稳定性,本期我们要引入一个新的评测标准--软件可靠性 ...
- 时间片 线程切换 指令周期 流水线 TPS的初步了解
时间片 线程切换 指令周期 流水线 TPS的初步了解 情况说明 Redis 单线程提供服务, 可以支撑十万级别的TPS 通过以个非常简单的测试 redis-benchmark -c 50 -n 500 ...
- [转帖]oracle如何删除datafile,误删除Oracle datafile 无法打开数据库
1.在Oracle open方式下,直接从OS上删除了datafile文件. rm /u02/rmants.dbf 2.数据库关闭后,无法打开数据库,只能到mount状态. SQL> alter ...