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