比赛 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;
}