记录编号 317098 评测结果 AAAAAAAAA
题目名称 [NOIP 2010冲刺七]最长路 最终得分 100
用户昵称 GravatarHzoi_Go灬Fire 是否通过 通过
代码语言 C++ 运行时间 0.038 s
提交时间 2016-10-07 17:29:59 内存使用 0.79 MiB
显示代码纯文本
  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<cmath>
  5. #include<cstdlib>
  6. #include<queue>
  7. #include<iostream>
  8. #define Begin freopen("longest.in","r",stdin);freopen("longest.out","w",stdout);
  9. #define End fclose(stdin);fclose(stdout);
  10. using namespace std;
  11. const int maxn=1510;
  12. struct Edge{
  13. int next,to,dis;
  14. }e[50000];
  15. int n,m,head[maxn],len;
  16. void Insert(int x,int y,int z){
  17. len++;e[len].to=y;e[len].next=head[x];e[len].dis=z;head[x]=len;
  18. }
  19. void Init();
  20. void Spfa(int x){
  21. queue<int> q;
  22. int dis[maxn];memset(dis,-0x7f,sizeof(dis));dis[x]=0;
  23. bool f[maxn];f[x]=1;
  24. q.push(x);
  25. while(!q.empty()){
  26. int k=q.front();q.pop();f[k]=0;
  27. for(int i=head[k];i;i=e[i].next){
  28. int j=e[i].to;
  29. if(dis[j]<dis[k]+e[i].dis){
  30. dis[j]=dis[k]+e[i].dis;
  31. if(!f[j]){q.push(j);f[j]=1;}
  32. }
  33. }
  34. }
  35. if(dis[n]<-515313515)printf("-1\n");
  36. else printf("%d\n",dis[n]);
  37. }
  38. int main(){
  39. Begin;
  40. Init();
  41. //system("pause");
  42. End;
  43. return 0;
  44. }
  45. void Init(){
  46. scanf("%d%d",&n,&m);
  47. for(int i=1;i<=m;i++){
  48. int x,y,z;scanf("%d%d%d",&x,&y,&z);
  49. Insert(x,y,z);
  50. }
  51. Spfa(1);
  52. }