• POJ 1716 Integer Intervals 差分约束


    题目:http://poj.org/problem?id=1716

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <vector>
     4 #include <queue>
     5 
     6 const int INF = 0x3f3f3f3f;
     7 
     8 struct Edge
     9 {
    10     int v, w;
    11     Edge(){};
    12     Edge(int v, int w)
    13     {
    14         this->v = v;
    15         this->w = w;
    16     }
    17 };
    18 
    19 std::vector<Edge>map[10010];
    20 int dist[10010];
    21 bool inque[10010];
    22 
    23 void spfa(int s)
    24 {
    25     std::queue<int>q;
    26     memset(inque, 0, sizeof(inque));
    27     dist[s] = 0;
    28     q.push(s);
    29     inque[s] = 1;
    30     while(!q.empty())
    31     {
    32         int u = q.front();
    33         q.pop();
    34         inque[u] = 0;
    35         for(int i = 0; i < map[u].size(); i++)
    36         {
    37             int v = map[u][i].v;
    38             if(dist[v] < dist[u] + map[u][i].w)
    39             {
    40                 dist[v] = dist[u] + map[u][i].w;
    41                 if(!inque[v])
    42                 {
    43                     q.push(v);
    44                     inque[v] = 1;
    45                 }
    46             }
    47         }
    48     }
    49 }
    50 
    51 int main()
    52 {
    53     int n;
    54     int x, y;
    55     while(scanf("%d", &n) != EOF)
    56     {
    57         for(int i = 0; i <= 10001; i++)
    58         {
    59             map[i].clear();
    60         }
    61         int low = INF, high = 0;
    62         for(int i = 0; i < n; i++)
    63         {
    64             scanf("%d %d", &x, &y);
    65             map[x].push_back(Edge(y+1, 2));
    66             if(low > x)low = x;
    67             if(high < y)high = y;
    68         }
    69         for(int i = low; i <= high+1; i++)
    70         {
    71             map[0].push_back(Edge(i, 0));
    72             map[i].push_back(Edge(i+1, 0));
    73             map[i+1].push_back(Edge(i, -1));
    74             dist[i] = -INF;
    75         }
    76         map[0].push_back(Edge(high+1, 0));
    77         spfa(low);
    78         printf("%d
    ", dist[high+1] - dist[low]);
    79     }
    80     return 0;
    81 }
    View Code
  • 相关阅读:
    CSS3动画基本的转换和过渡
    学习进度(2016.4.3)
    敏捷开发方法综述
    学习进度(2016.3.27)
    数组问题(二)求环形数组子数组和的最大值
    数组问题(一)求子数组和的最大值
    学习进度(2016.3.20)
    程序设计之四则运算三
    学习进度(2016.3.13)
    Right-BICEP 测试四则运算二程序
  • 原文地址:https://www.cnblogs.com/wolfred7464/p/3379416.html
Copyright © 2020-2023  润新知