社区讨论

spfa #15 #16 #18 #19 #20 TLE

P5468[NOI2019] 回家路线参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m3cdfqne
此快照首次捕获于
2024/11/11 09:55
去年
此快照最后确认于
2024/11/11 14:28
去年
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
int n, m, a, b, c;
struct egde {
	int x, y, p, q;
} e[200001];
long long dp[200001], tot;
int x, y, p, q;
bool cmp(egde a, egde b) {
	if (a.x != b.x)
		return a.x < b.x;
	return a.y < b.y;
}
queue<int> que;
int vis[200001];
long long sum(int i, int j) {
	return a * (e[i].p - e[j].q) * (e[i].p - e[j].q) + b * (e[i].p - e[j].q) + c;
}
int main() {
    ios::sync_with_stdio(false);
	cin >> n >> m >> a >> b >> c;
	for (int i = 1; i <= m; i++)
		cin >> e[i].x >> e[i].y >> e[i].p >> e[i].q;
	for (int i = 0; i <= m; i++) {
		if (e[i].y == n) {
			dp[i] = e[i].q;
			que.push(i);
		} else dp[i] = 0x3f3f3f3f3f3f3f3f;
	}
	while (que.size()) {
		int u = que.front();
		que.pop();
		vis[u] = 0;
		for (int i = 0; i <= m; i++)
			if ((i == 0 && e[u].x == 1) || (e[i].y == e[u].x && e[i].q <= e[u].p)) {
				if (dp[u] + sum(u, i) < dp[i]) {
					dp[i] = dp[u] + sum(u, i);
					if (vis[i] == 0) {
						que.push(i);
						vis[i] = 1;
					}
				}
			}
	}
	cout << dp[0] << endl;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...