46pts 悬关求hack-指出错误
  • 板块P1807 最长路
  • 楼主znzryb
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/8/28 22:45
  • 上次更新2024/8/29 11:06:26
查看原帖
46pts 悬关求hack-指出错误
1368189
znzryb楼主2024/8/28 22:45
#include <iostream>
#include <queue>
using namespace std;
const int maxn=1510,minu=-2e9;
int n,m,u,v,w,ww[maxn][maxn],inDegree[maxn],curr_u,vis[maxn];
struct edge {
    vector<int> son;
}g[maxn];
queue<int> q;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin>>n>>m;
    for(int i=0;i<m;i++) {
        cin>>u>>v>>w;
        ww[u][v]=w;     // 边权值
        g[u].son.push_back(v);
        inDegree[v]+=1;
    }
    fill(&vis[0],&vis[n+1],minu);
    vis[1]=0;
    for(int i=2;i<=n;i++) {
        if(inDegree[i]==0) {
            for(auto sonn:g[i].son) {
                inDegree[sonn]-=1;
            }
        }
    }
    q.push(1);
    while(!q.empty()) {
        curr_u=q.front();
        q.pop();
        for(auto sonn:g[curr_u].son) {
            inDegree[sonn]-=1;
            if(inDegree[sonn]==0) {
                q.push(sonn);
            }
            vis[sonn]=max(vis[curr_u]+ww[curr_u][sonn],vis[sonn]);
        }
    }
    if(vis[n]==minu) {
        cout<<-1<<endl;
    }else {
        cout<<vis[n]<<endl;
    }
    return 0;
}
2024/8/28 22:45
加载中...