记录编号 50950 评测结果 AAAAAAAAA
题目名称 [NOIP 2010冲刺七]最长路 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 0.054 s
提交时间 2012-12-05 21:27:25 内存使用 8.92 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
#include <utility>
using namespace std;
const int N=1501;
int c[N][N]={0},f[N]={0};
int n,m;
void BellmanFord(int s){//SPFA
    queue<int> q;
    bool l[N]={0};l[s]=1;
    fill_n(f,n+1,-1);f[s]=0;
    q.push(s);
    while(!q.empty()) {
        int u=q.front();q.pop();
        l[u]=0;
		for(int i=1;i<=n;i++){
			if(i==u) continue;
			if(c[u][i]!=-1){
				int v=i;
				if(f[v]<f[u]+c[u][i]) {
					f[v]=f[u]+c[u][i];
					if(!l[v]){
						l[v] = 1;
						q.push(v);
					}
				}	
			}
		}
    }
}
int main(){
	freopen("longest.in","r",stdin);
	freopen("longest.out","w",stdout);
	scanf("%d%d",&n,&m);
	int a,b,v,i,j;
	for(i=1;i<=n;i++){
		for(j=1;j<=n;j++){
			if(i!=j) c[i][j]=-1;
		}
	}
	for(i=0;i<m;i++){
		scanf("%d%d%d",&a,&b,&v);
		if(v>c[a][b]) c[a][b]=v;
	}
	BellmanFord(1);
	if(f[n]==-1) printf("-1\n");
	else printf("%d\n",f[n]);
	return 0;
}