55分求调 拓扑排序写的
  • 板块P1807 最长路
  • 楼主mugi_chou
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/7/22 16:53
  • 上次更新2025/7/22 18:25:17
查看原帖
55分求调 拓扑排序写的
1539943
mugi_chou楼主2025/7/22 16:53
#include<bits/stdc++.h>
#define MAXN 50000
#define INF -1e18
using namespace std;
long long n, m, u, v, w;
struct Node{
    long long v, w;
};
vector<Node> linker[MAXN];
long long ru[MAXN], ANS[MAXN];
bool vis[MAXN];
int main(){
    cin >> n >> m;
    memset(vis, false, sizeof(vis));
    for(long long i = 1; i <= n; i++) ANS[i] = INF;
    ANS[1] = 0;
    for(long long i = 1; i <= m; i++){
        cin >> u >> v >> w;
        linker[u].push_back({v, w});
        ru[v]++;
    }
    queue<long long> q;
    q.push(1);
    while(!q.empty()){
        long long a = q.front();
        q.pop();
        for(long long i = 0; i < linker[a].size(); i++){
            long long b = linker[a][i].v;//终点
            long long wi = linker[a][i].w;
            ru[b]--;
            ANS[b] = max(ANS[b], wi + ANS[a]);
            if(ru[b] == 0) q.push(b);
        } 
    }
    if(ANS[n] == INF) cout << -1;
    else cout << ANS[n];
    return 0;
}
2025/7/22 16:53
加载中...