zoukankan      html  css  js  c++  java
  • poj 3169 Layout

    题意:

    n头牛编号为1到n,按照编号的顺序排成一列,每两头牛的之间的距离 >= 0。这些牛的距离存在着一些约束关系:1.有ml组(u, v, w)的约束关系,表示牛[u]和牛[v]之间的距离必须 <= w。2.有md组(u, v, w)的约束关系,表示牛[u]和牛[v]之间的距离必须 >= w。问如果这n头无法排成队伍,则输出-1,如果牛[1]和牛[n]的距离可以无限远,则输出-2,否则则输出牛[1]和牛[n]之间的最大距离。

    分析:

    三个式子:

    1、s[i+1]-s[i]>=0  ==>  s[i]-s[i+1]<=0

    2、ML 时:s[end]-s[st]<=x

    3、MD 时: s[end]-s[st]>=x ==> s[st]-s[end]<=-x

    View Code
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 
     6 using namespace std;
     7 
     8 #define inf 100000000
     9 struct Edge
    10 {
    11     int s,e;
    12     int val;
    13 }edge[25000];
    14 
    15 int pe;
    16 int N,ML,MD;
    17 int dis[1100];
    18 
    19 bool bellman_ford()
    20 {
    21     bool sign;
    22 
    23     for(int j=0;j<N+1;j++)
    24     {
    25         sign=false;
    26         for(int i=0;i<pe;i++)
    27             if(dis[edge[i].e] > dis[edge[i].s] + edge[i].val)
    28             {
    29                 dis[edge[i].e] = dis[edge[i].s] + edge[i].val;
    30                 sign=true;
    31             }
    32         if(!sign)
    33             break;
    34     }
    35     if(sign)
    36         return false;//存在负环
    37     else
    38         return true;
    39 }
    40 
    41 int main()
    42 {
    43     while(scanf("%d%d%d",&N,&ML,&MD) !=EOF)
    44     {
    45         for(int i=0;i<1100;i++)
    46             dis[i]=inf;
    47         dis[0]=0;
    48         dis[1]=0;
    49         pe=0;
    50 
    51         int a,b,x;
    52         for(int i=1;i<=N-1;i++)
    53         {
    54             edge[pe].s=i+1;
    55             edge[pe].e=i;
    56             edge[pe++].val=0;
    57         }
    58         for(int i=0;i<ML;i++)
    59         {
    60             scanf("%d%d%d",&a,&b,&x);
    61             edge[pe].s=a;
    62             edge[pe].e=b;
    63             edge[pe++].val=x;
    64         }
    65         for(int i=0;i<MD;i++)
    66         {
    67             scanf("%d%d%d",&a,&b,&x);
    68             edge[pe].s=b;
    69             edge[pe].e=a;
    70             edge[pe++].val=-x;
    71         }
    72     
    73         if(bellman_ford() && dis[N] != inf)
    74             printf("%d\n",dis[N]);
    75         else if(dis[N] == inf)
    76             puts("-2");
    77         else
    78             puts("-1");
    79     }
    80     return 0;
    81 }

     

     

  • 相关阅读:
    leetcode 86. Partition List
    leetcode 303. Range Sum Query
    leetcode 1310. XOR Queries of a Subarray
    leetcode 1309. Decrypt String from Alphabet to Integer Mapping
    leetcode 215. Kth Largest Element in an Array
    将numpy.ndarray写入excel
    leetcode 1021 Remove Outermost Parentheses
    leetcode 1306. Jump Game III
    leetcode 1305. All Elements in Two Binary Search Trees
    ICCV2019 oral:Wavelet Domain Style Transfer for an Effective Perception-distortion Tradeoff in Single Image Super-Resolution
  • 原文地址:https://www.cnblogs.com/Missa/p/2660332.html
Copyright © 2011-2022 走看看