社区讨论

P1073 最优贸易

P1073[NOIP 2009 提高组] 最优贸易参与者 2已保存回复 3

讨论操作

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

当前回复
3 条
当前快照
1 份
快照标识符
@m44yorzo
此快照首次捕获于
2024/12/01 10:07
去年
此快照最后确认于
2025/11/04 13:32
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
struct node {
	int id, dis;
};
vector<node> a[30005];
queue<int> q;
int n, m, w[300005], u, v, t, dis;
bool f[300005];

void spfa() {
	memset(w, -0x3f, sizeof(w));
	w[1] = 0;
	q.push(1);
	while (!q.empty()) {
		u = q.front(), q.pop();
		f[u] = 0;
		for (int i = 0; i < a[u].size(); i ++) {
			v = a[u][i].id, dis = w[u] + a[u][i].dis;
			if (dis <= w[v]) continue;
			w[v] = dis;
			if (!f[v]) q.push(v), f[v] = 1;
		}
	}
}

int main()
{
	cin >> n >> m;
	int n2 = n * 2;
	for (int i = 1; i <= n; i ++) {
		cin >> t;
		a[i].push_back({n + i, -t});
		a[n + i].push_back({n2 + i, t});
	}
	for (int i = 1; i <= m; i ++) {
		cin >> u >> v >> t;
		a[u].push_back({v, 0});
		a[n + u].push_back({n + v, 0});
		a[n2 + u].push_back({n2 + v, 0});
		if (t == 2) {
			a[v].push_back({u, 0});
			a[n + v].push_back({n + u, 0});
			a[n2 + v].push_back({n2 + u, 0});
		}
	}
	spfa();
	cout << w[3 * n];
	return 0;
 } 

回复

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

正在加载回复...