拓扑排序56分求助
查看原帖
拓扑排序56分求助
895784
qifenzhiyi142857楼主2023/7/5 11:22
#include <bits/stdc++.h>
#define pii pair<int, int>
#define vi vector<int>
#define x first
#define y second
#define int long long
#define uf(i, l, r) for(int i = l; i <= r; ++i)
#define df(i, l, r) for(int i = l; i >= r; --i)
#define ios ios::sync_with_stdio(0)\
, cin.tie(0), cout.tie(0)
using namespace std;
const int INF = 5e9 + 5;
const int N = 1505;
int n, m;
int mp[N][N] = {{0}};
int ru[N] = {0};
int num[N] = {0};
signed main() {
	cin >> n >> m;
	uf(i, 1, n) num[i] = -INF;
	uf(i, 1, n)
		uf(j, 1, n)
			mp[i][j] = -INF;
	int u, v, ww;
	while(m--) {
		cin >> u >> v >> ww;
		mp[u][v] = max(mp[u][v], ww);
		ru[v]++;
	}
	queue<int> q;
	q.push(1);
	num[1] = 0;
	while(q.size()) {
		int t = q.front();
		q.pop();
		uf(i, 1, n) {
			if(mp[t][i] != -INF) {
				ru[i]--;
				num[i] = max(num[i], num[t] + mp[t][i]);
				if(!ru[i]) q.push(i);
			}
		}
	}
	if(num[n] == -INF) num[n] = -1;
	cout << num[n];
}
2023/7/5 11:22
加载中...