46pts求调Thanks(・ω・)
  • 板块P1807 最长路
  • 楼主cuolema
  • 当前回复4
  • 已保存回复4
  • 发布时间2025/7/25 19:14
  • 上次更新2025/7/26 09:12:55
查看原帖
46pts求调Thanks(・ω・)
1792325
cuolema楼主2025/7/25 19:14

topo做的46pts:

#include <bits/stdc++.h>
using namespace std;
const long long N = 1e5 + 5;
long long n, m, dp[N];
long long num[N];
struct SJC {
    long long v, w;
};
vector<SJC> why[N];
void topo() {
    for (int i = 1; i <= n; ++i)
        dp[i] = -1e17;
	queue<long long> que;
    for (int i = 1; i <= n; ++i) {
    	if (!num[i]) {
    		dp[i] = 0;
    		que.push(i);
		}
	}
    while (!que.empty()) {
        long long u = que.front();
        que.pop();
        for (long long i = 0; i < why[u].size(); ++i) {
            long long v = why[u][i].v, w = why[u][i].w;
            if (dp[v] < dp[u] + w)
                dp[v] = dp[u] + w;
            --num[v];
            if (!num[v])
                que.push(v);
        }
    }
    if (dp[n] < -1e15)
    	cout << -1;
    else
    	cout << dp[n];
    return ;
}

int main() {
    cin.tie(0) -> ios::sync_with_stdio(false);
    cout.tie(0);
    cin >> n >> m;
    for (long long i = 1; i <= m; ++i) {
        long long u, v, w;
        cin >> u >> v >> w;
        why[u].push_back({v, w});
        ++num[v];
    }
    topo();
    return 0;
}
2025/7/25 19:14
加载中...