比赛 |
20121009 |
评测结果 |
AAAAAAAAA |
题目名称 |
最长路 |
最终得分 |
100 |
用户昵称 |
Truth.Cirno |
运行时间 |
0.114 s |
代码语言 |
C++ |
内存使用 |
40.13 MiB |
提交时间 |
2012-10-09 20:18:41 |
显示代码纯文本
#include <iostream>
#include <cstdio>
using namespace std;
int waynum[1510],wayto[1510][1510],waycost[1510][1510],f[1510],usednum[1510],usedrec[1510][1510],cost[1510][1510];
bool used[1510][1510];
int main(void)
{
freopen("longest.in","r",stdin);
freopen("longest.out","w",stdout);
int i,j,n,m,a,b,v,deep,from,to,temp;
cin>>n>>m;
if (n==1)
{
cout<<'0'<<endl;
return(0);
}
f[n]=-1;
for (i=1;i<=m;i++)
{
cin>>a>>b>>v;
waynum[a]++;
wayto[a][waynum[a]]=b;
waycost[a][waynum[a]]=v;
}
deep=1;
usednum[1]=1;
used[1][1]=true;
usedrec[1][1]=1;
while (usednum[deep])
{
for (i=1;i<=usednum[deep];i++)
{
from=usedrec[deep][i];
for (j=1;j<=waynum[from];j++)
{
to=wayto[from][j];
if (!used[deep+1][to])
{
used[deep+1][to]=true;
usednum[deep+1]++;
usedrec[deep+1][usednum[deep+1]]=to;
}
temp=cost[deep][from]+waycost[from][j];
if (cost[deep+1][to]<temp)
cost[deep+1][to]=temp;
if (f[to]<cost[deep+1][to])
f[to]=cost[deep+1][to];
}
}
deep++;
}
cout<<f[n]<<endl;
return(0);
}