zoukankan      html  css  js  c++  java
  • poj 3159 差分约束+spfa

    差分约束第一题,想明白以后就可以建图了。由于此题数据特殊,队列优化的spfa会超时,可以改成用栈来优化。

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <cstring>
     4 #include <cstdio>
     5 using namespace std;
     6 
     7 const int INF = 9999999;
     8 const int N = 30001;
     9 const int M = 150000;
    10 int head[N];
    11 int dist[N];
    12 bool visit[N];
    13 int n, m, e;
    14 
    15 struct Edge
    16 {
    17     int v, next, w;
    18 } edge[M];
    19 
    20 void addEdge( int u, int v, int w )
    21 {
    22     edge[e].v = v;
    23     edge[e].w = w;
    24     edge[e].next = head[u];
    25     head[u] = e++;
    26 }
    27 
    28 void spfa( int s )
    29 {
    30     for ( int i = 1; i <= n; i++ )
    31     {
    32         dist[i] = INF;
    33         visit[i] = false;
    34     }
    35     dist[s] = 0;
    36     visit[s] = true;
    37     int q[N], top = 0;
    38     q[top++] = s;
    39     while ( top )
    40     {
    41         int u = q[--top];
    42         visit[u] = false;
    43         for ( int j = head[u]; j != -1; j = edge[j].next )
    44         {
    45             int v = edge[j].v, w = edge[j].w;
    46             if ( dist[v] > dist[u] + w )
    47             {
    48                 dist[v] = dist[u] + w;
    49                 if ( !visit[v] )
    50                 {
    51                     q[top++] = v;
    52                     visit[v] = true;
    53                 }
    54             }
    55         }
    56     }
    57 }
    58 
    59 int main ()
    60 {
    61     while ( scanf("%d%d", &n, &m) != EOF )
    62     {
    63         e = 0;
    64         memset( head, -1, sizeof(head) );
    65         while ( m-- )
    66         {
    67             int u, v, w;
    68             scanf("%d%d%d", &u, &v, &w);
    69             addEdge( u, v, w );
    70         }
    71         spfa(1);
    72         printf("%d
    ", dist[n]);
    73     }
    74     return 0;
    75 }
  • 相关阅读:
    linux动态库加载路径修改
    RAII手法封装互斥锁
    比特数组
    c++行事准则
    构造函数初始化列表
    this与const
    不完全类型
    Django初学习(四):模板-上下文管理器的使用
    Django初学习(三):模板的使用
    Django初学习(二):路由&子路由
  • 原文地址:https://www.cnblogs.com/huoxiayu/p/4766359.html
Copyright © 2011-2022 走看看