• P1807 最长路_NOI导刊2010提高(07)--最长路


          P1807 最长路_NOI导刊2010提高(07)

    题目描述

    设G为有n个顶点的有向无环图,G中各顶点的编号为1到n,且当为G中的一条边时有i < j。设w(i,j)为边的长度,请设计算法,计算图G中<1,n>间的最长路径。

    输入输出格式

    输入格式:

    输入文件longest.in的第一行有两个整数n和m,表示有n个顶点和m条边,接下来m行中每行输入3个整数a,b,v(表示从a点到b点有条边,边的长度为v)。

    输出格式:

    输出文件longest.out,一个整数,即1到n之间的最长路径.如果1到n之间没连通,输出-1。

    输入输出样例

    输入样例#1:
    2 1
    1 2 1
    输出样例#1:
    1

    说明

    20%的数据,n≤100,m≤1000

    40%的数据,n≤1,000,m≤10000

    100%的数据,n≤1,500,m≤50000,最长路径不大于10^9

     1 /*
     2     水题
     3     SPFA求最长路 
     4 */
     5 #include <queue>
     6 #include <ctype.h>
     7 #include <cstdio>
     8 
     9 const int MAXN=1510;
    10 const int MAXM=50010;
    11 const int INF=0x3f3f3f3f;
    12 
    13 int n,m;
    14 
    15 int dis[MAXN];
    16 
    17 bool vis[MAXN];
    18 
    19 struct WE {
    20     int to;
    21     int val;
    22     int next;
    23 };
    24 WE e[MAXM<<1];
    25 
    26 int head[MAXN],tot;
    27 
    28 inline void read(int&x) {
    29     int f=1;register char c=getchar();
    30     for(x=0;!isdigit(c);c=='-'&&(f=-1),c=getchar());
    31     for(;isdigit(c);x=x*10+c-48,c=getchar());
    32     x=x*f;
    33 }
    34 
    35 inline void add(int x,int y,int v) {
    36     e[++tot].to=y;
    37     e[tot].val=v;
    38     e[tot].next=head[x];
    39     head[x]=tot;
    40 }
    41 
    42 void SPFA() {
    43     std::queue<int> Q;
    44     dis[1]=0;
    45     Q.push(1);
    46     while(!Q.empty()) {
    47         int now=Q.front();
    48         Q.pop();
    49         vis[now]=false;
    50         for(int i=head[now];i;i=e[i].next) {
    51             int u=e[i].to;
    52             if(dis[u]<dis[now]+e[i].val) {
    53                 dis[u]=dis[now]+e[i].val;
    54                 if(!vis[u]) Q.push(u),vis[u]=true;
    55             }
    56         }
    57     }
    58 }
    59 
    60 int hh() {
    61     read(n);read(m);
    62     for(int x,y,z;m--;) {
    63         read(x);read(y);read(z);
    64         if(x<y) add(x,y,z);
    65     } 
    66     for(int i=1;i<=n;++i) dis[i]=-1;
    67     SPFA();
    68     printf("%d
    ",dis[n]);
    69     return 0;
    70 }
    71 
    72 int sb=hh();
    73 int main() {;} 
    代码


    作者:乌鸦坐飞机
    出处:http://www.cnblogs.com/whistle13326/
    新的风暴已经出现 怎么能够停止不前 穿越时空 竭尽全力 我会来到你身边 微笑面对危险 梦想成真不会遥远 鼓起勇气 坚定向前 奇迹一定会出现

     
  • 相关阅读:
    手机端上传图片及java后台接收和ajaxForm提交
    JEECG中datagrid方法自定义查询条件
    微信分享到朋友圈按钮 右上角提示
    Js获取后台集合List的值和下标的方法
    redis系列之数据库与缓存数据一致性解决方案
    替换{0}为指定的字符串(MessageFormat)
    java中对array数组的常用操作
    面试题-Java Web-网络通信
    你应该知道的JAVA面试题
    各大互联网公司java开发面试常问问题
  • 原文地址:https://www.cnblogs.com/whistle13326/p/7421922.html
Copyright © 2020-2023  润新知