zoukankan      html  css  js  c++  java
  • poj 3255(次短路)

    求次短路。

     1 // File Name: 3255.cpp
     2 // Author: Missa
     3 // Created Time: 2013/4/5 星期五 1:01:09
     4 
     5 #include<iostream>
     6 #include<cstdio>
     7 #include<cstring>
     8 #include<algorithm>
     9 #include<cmath>
    10 #include<queue>
    11 #include<stack>
    12 #include<string>
    13 #include<vector>
    14 #include<cstdlib>
    15 #include<map>
    16 #include<set>
    17 using namespace std;
    18 #define CL(x,v) memset(x,v,sizeof(x));
    19 #define R(i,st,en) for(int i=st;i<en;++i)
    20 #define LL long long
    21 #define inf 0x3f3f3f3f
    22 
    23 const int maxn = 5e3+5;
    24 int n,m;
    25 struct edge
    26 {
    27     int v, c;
    28     edge(){}
    29     edge(int v, int c):v(v), c(c){}
    30 };
    31 vector <edge> adj[maxn];
    32 
    33 int dij(int src)
    34 {
    35     bool vis[maxn][2];
    36     CL(vis,0);
    37     int dis[maxn][2];
    38     int u,v,c;
    39     CL(dis,0x3f);
    40     dis[src][0] = 0;
    41     for (int i = 0; i <= 2 * n; ++i)
    42     {
    43         int tmp = inf, u = src, p = 0;
    44         for (int j = 1; j <= n; ++j)
    45         {
    46             if(!vis[j][0] && tmp > dis[j][0])
    47             {
    48                 tmp = dis[j][0];
    49                 u = j;
    50                 p = 0;
    51             }
    52             else if(!vis[j][1] && tmp > dis[j][1])
    53             {
    54                 tmp = dis[j][1];
    55                 u = j;
    56                 p = 1;
    57             }
    58         }
    59         if(tmp == inf) break;
    60         vis[u][p] = 1;
    61         for (int j = 0; j < adj[u].size(); ++j)
    62         {
    63             v = adj[u][j].v;
    64             c = adj[u][j].c;
    65             if (dis[v][0] > tmp + c)
    66             {
    67                 dis[v][1] = dis[v][0];
    68                 dis[v][0] = tmp + c;
    69             }
    70             else if (dis[v][1] > tmp + c)
    71             {
    72                 dis[v][1] = tmp + c;
    73             }
    74         }
    75     }
    76     return dis[n][1];
    77 }
    78 
    79 int main()
    80 {
    81     int u, v, c;
    82     while(~scanf("%d%d", &n, &m))
    83     {
    84         CL(adj, 0);
    85         while(m--)
    86         {
    87             scanf("%d%d%d",&u, &v, &c);
    88             adj[u].push_back(edge(v,c));
    89             adj[v].push_back(edge(u,c));
    90         }
    91         printf("%d\n",dij(1));
    92     }
    93     return 0;
    94 }
  • 相关阅读:
    百度搜索API v3版本与soap
    Yii整合ZF2及soap实例
    Getting started writing ZF2 modules
    js写出php中的函数系列
    一些有用的命令
    a标签至于flash之上的时候,IE浏览器无法点击连接的问题
    js问题集锦
    php常用函数集锦[备份用的]
    用过的一些js函数[备份用的]
    ELK
  • 原文地址:https://www.cnblogs.com/Missa/p/3000416.html
Copyright © 2011-2022 走看看