• pku3169 Layout


    http://poj.org/problem?id=3169

    图论,差分约束系统,SPFA

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <queue>
     4 #define N 1234
     5 
     6 using namespace std;
     7 
     8 int n, m, src;
     9 vector<pair<int, int> > g[N];
    10 int dist[N];
    11 bool inQue[N];
    12 queue<int> que;
    13 int count[N];
    14 const int inf = 1<<29;
    15 
    16 int spfa()
    17 {
    18     int i;
    19     for(i=0; i<N; i++)
    20     {
    21         dist[i] = inf;
    22         count[i] = 0;
    23     }
    24     dist[src] = 0;
    25     while(!que.empty())
    26     {
    27         que.pop();
    28     }
    29     que.push(src);
    30     count[src] ++;
    31     inQue[src] = true;
    32     while(!que.empty())
    33     {
    34         int u = que.front();
    35         que.pop();
    36         for(i=0; i<g[u].size(); i++)
    37         {
    38             if(dist[u] + g[u][i].second < dist[g[u][i].first])
    39             {
    40                 dist[g[u][i].first] = dist[u] + g[u][i].second;
    41                 if(!inQue[g[u][i].first])
    42                 {
    43                     inQue[g[u][i].first] = true;
    44                     que.push(g[u][i].first);
    45                     count[g[u][i].first] ++;
    46                     if(count[g[u][i].first] > n)
    47                     {
    48                         return -1;
    49                     }
    50                 }
    51             }
    52         }
    53         inQue[u] = false;
    54     }
    55     if(dist[n] == inf)
    56     {
    57         return -2;
    58     }
    59     return dist[n];
    60 }
    61 
    62 
    63 int main()
    64 {
    65     int i, j, m1, m2, x, y, len;
    66     int temp;
    67     scanf("%d%d%d", &n, &m1, &m2);
    68     for(i=1; i<=m1; i++)
    69     {
    70         scanf("%d%d%d", &x, &y, &len);
    71         if(y < x)
    72         {
    73             temp = x, x = y, y = temp;
    74         }
    75         g[x].push_back(make_pair(y, len));
    76     }
    77     for(i=1; i<=m2; i++)
    78     {
    79         scanf("%d%d%d", &x, &y, &len);
    80         if(y < x)
    81         {
    82             temp = x, x = y, y = temp;
    83         }
    84         g[y].push_back(make_pair(x, -len));
    85     }
    86     src = 1;
    87     printf("%d\n", spfa());
    88     return 0;
    89 }
  • 相关阅读:
    nginx命令
    MyBatis的动态SQL详解
    使用group_concat 时,设置mysql默认的长度
    mysql 设置可以外部访问
    mysql workbench建表时PK,NN,UQ,BIN,UN,ZF,AI
    SpringMVC之REST
    SpringMVC之@PathVariable 映射 URL 绑定的占位符
    SpringMVC之使用 @RequestMapping 映射请求
    DispatcherServlet源码注解分析
    SpringMVC之HelloWorld
  • 原文地址:https://www.cnblogs.com/yuan1991/p/pku3169.html
Copyright © 2020-2023  润新知