比赛 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;
}