比赛 |
20121009 |
评测结果 |
AAAAAAAAA |
题目名称 |
最长路 |
最终得分 |
100 |
用户昵称 |
feng |
运行时间 |
0.299 s |
代码语言 |
C++ |
内存使用 |
31.27 MiB |
提交时间 |
2012-10-09 20:21:56 |
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int i,j,k,n,m,l,r,s,t,x,y,max,maxi;
int bian[1600];
int a[1600][1600][3];
int d[1600];
int b[1600];
bool v[1600];
int main()
{
freopen("longest.in","r",stdin);
freopen("longest.out","w",stdout);
scanf("%d%d",&n,&m);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for (i=1;i<=m;i++){
scanf("%d%d%d",&j,&k,&t);
bian[j]++;
a[j][bian[j]][1]=k;
a[j][bian[j]][2]=t;
}
l=0;r=1;
memset(v,false,sizeof(v));
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 ((d[a[x][i][1]]<d[x]+a[x][i][2]) || (d[a[x][i][1]]==0))
{
d[a[x][i][1]]=d[x]+a[x][i][2];
if (!v[a[x][i][1]]) {
v[a[x][i][1]]=true;
r=(r+1)%n;
b[r]=a[x][i][1];
}
}
}
}
if (d[n]==0) printf("-1");
else printf("%d",d[n]);
return 0;
}