比赛 |
2025暑期集训第5场图论专场 |
评测结果 |
AAAAAAAAAA |
题目名称 |
Milk Pumping |
最终得分 |
100 |
用户昵称 |
OTTF |
运行时间 |
0.152 s |
代码语言 |
C++ |
内存使用 |
3.70 MiB |
提交时间 |
2025-07-09 09:03:16 |
显示代码纯文本
#include <algorithm>
#include <cstdio>
#include <iostream>
#include <queue>
#include <tuple>
#include <vector>
using namespace std;
constexpr int N = 1145;
int n;
int m;
vector<tuple<int, int, int>> graph[N];
vector<int> fs;
bool flag[N];
int dis[N];
int res;
int dijkstra (int limit) {
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
pq.emplace(0, 1);
fill (dis, dis + n + 1, 1e8);
fill (flag, flag + n + 1, false);
dis[1] = 0;
while (!pq.empty()) {
auto [_, u] = pq.top();
pq.pop();
if (flag[u]) {
continue;
}
flag[u] = true;
for (auto[v, c, f] : graph[u]) {
if (f >= limit && dis[v] > dis[u] + c) {
dis[v] = dis[u] + c;
pq.emplace(dis[v], v);
}
}
}
return dis[n];
}
int main () {
freopen ("pump.in", "r", stdin);
freopen ("pump.out" ,"w", stdout);
cin >> n >> m;
int u, v, c, f;
for (int i = 1; i <= m; i++) {
cin >> u >> v >> c >> f;
graph[u].emplace_back(v, c, f);
graph[v].emplace_back(u, c, f);
fs.push_back(f);
}
for (auto f : fs) {
res = max (res, int (1e6) * f / dijkstra (f));
}
cout << res << endl;
return 0;
}