P1807 最长路 求调
  • 板块灌水区
  • 楼主Juice_Jiouge
  • 当前回复2
  • 已保存回复2
  • 发布时间2025/1/21 16:16
  • 上次更新2025/1/21 16:40:48
查看原帖
P1807 最长路 求调
711650
Juice_Jiouge楼主2025/1/21 16:16

https://www.luogu.com.cn/problem/P1807
https://www.luogu.com.cn/record/199710981

第二个点炸了,求调。

#include<bits/stdc++.h>
using namespace std;
int n,m;
struct Side{int v,w;};
struct Top{vector<Side>vec;};
Top way[50005];
int vis[1505],M[1505];
bool flag=false;
queue<int>que;
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int a,b,c;
        cin>>a>>b>>c;
        Side s;
        s.v=b;
        s.w=c;
        way[a].vec.push_back(s);
        vis[b]++;
    }
    que.push(1);
    for(int i=2;i<=n;i++)
        if(vis[i]==0)
            for(int j=0;j<way[i].vec.size();j++)
                vis[way[i].vec[j].v]--;
    while(!que.empty())
    {
        int poi=que.front();
        que.pop();
        for(int i=0;i<way[poi].vec.size();i++)
        {
            vis[way[poi].vec[i].v]--;
            if(vis[way[poi].vec[i].v]==0)
                que.push(way[poi].vec[i].v);
            M[way[poi].vec[i].v]=max(M[way[poi].vec[i].v],M[poi]+way[poi].vec[i].w);
            if(way[poi].vec[i].v==n)
                flag=true;
        }
    }
    if(flag==false)
        cout<<"-1\n";
    else
        cout<<M[n]<<endl;
    return 0;
}
2025/1/21 16:16
加载中...