显示代码纯文本
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
int i,j,k,n,m,l,r,t,x,y;
int ll[1600][1600][3]={0},s[1600]={0},bian[1600];
int b[1600];
bool v[1600]={false};
int main()
{
ifstream fin("longest.in");
ofstream fout("longest.out");
fin>>n>>m;
for (i=1;i<=m;i++)
{
fin>>j>>k>>t;
bian[j]++;
ll[j][bian[j]][1]=k;
ll[j][bian[j]][2]=t;
}
l=0;r=1;
b[1]=1;
v[1]=true;
while (l!=r)
{
l=(l+1)%n;
x=b[l];
v[x]=false;
for (i=1;i<=bian[x];i++)
{
if ((s[ll[x][i][1]]<s[x]+ll[x][i][2])||(s[ll[x][i][1]]==0))
{
s[ll[x][i][1]]=s[x]+ll[x][i][2];
if (!v[ll[x][i][1]])
{
v[ll[x][i][1]]=true;
r=(r+1)%n;
b[r]=ll[x][i][1];
}
}
}
}
if (s[n]==0) fout<<"-1";
else fout<<s[n];
fin.close();
fout.close();
return 0;
}