zoukankan      html  css  js  c++  java
  • 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

    spfa最长路

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<queue>
     5 using namespace std;
     6 const int MAXN = 1510;
     7 
     8 struct Edge{
     9     int to,w,nxt;
    10 }e[50100];
    11 
    12 int dis[MAXN];
    13 int head[MAXN];
    14 bool vis[MAXN];
    15 queue<int>q;
    16 int n,m,cnt;
    17 
    18 void add(int u,int v,int w)    //从u到v有一条长度是w的边 
    19 {
    20     ++cnt;
    21     e[cnt].to = v;
    22     e[cnt].w = w;
    23     e[cnt].nxt = head[u];
    24     head[u] = cnt;
    25 }
    26 
    27 void spfa()
    28 {
    29     for (int i=1; i<=n; ++i) dis[i] = -1;
    30     dis[1] = 0;
    31     q.push(1);
    32     vis[1] = true;
    33     while (!q.empty())
    34     {
    35         int u = q.front();
    36         q.pop();
    37         for (int i=head[u]; i; i=e[i].nxt)
    38         {
    39             int v = e[i].to;
    40             int w = e[i].w;
    41             if (dis[v]<dis[u]+w)
    42             {
    43                 dis[v] = dis[u]+w;
    44                 if (!vis[v])
    45                 {
    46                     q.push(v);
    47                     vis[v] = true;
    48                 }
    49             }
    50         }
    51         vis[u] = false;
    52     }
    53 }
    54 
    55 int main()
    56 {
    57     scanf("%d%d",&n,&m);
    58     for (int u,v,w,i=1; i<=m; ++i)
    59     {
    60         scanf("%d%d%d",&u,&v,&w);
    61         add(u,v,w); 
    62     }
    63     spfa();
    64     printf("%d",dis[n]);
    65     return 0;
    66 }
  • 相关阅读:
    关于分布式事务、两阶段提交协议、三阶提交协议
    关于分布式一致性的探究
    初始分布式系统
    移动端禁止video在ios系统中自动全屏播放
    ios对new Date() 的兼容问题
    VUE路由懒加载的方式
    记录 好看的阴影
    创建码云仓库,并将本地代码上传至仓库
    v-cloak遇到的问题及解决方法
    CSS 定义一条渐变优雅的分割线
  • 原文地址:https://www.cnblogs.com/mjtcn/p/7096454.html
Copyright © 2011-2022 走看看