HDUのトリロジー1つの間隔の差の制約spfaアルゴリズム

問題の説明
あなたは与えられたnは、整数間隔[AI、BI]およびnは整数C1を閉じ...、CNされています。 
プログラムを書く: 
間隔の数を読み取るを、そのエンドポイントと整数C1、...は、標準入力からCN、 
区間[AIと少なくともCI共通の要素を有する整数の集合Zの最小サイズを計算し、 BI]、それぞれ= 1,2、...、nは、私のために 
標準出力に答えを書き込みます。 
 

 

入力
入力の最初の行は整数nを含有する(1 <= N <= 50000) - 間隔の数。次のn行は、間隔を記述する。入力の第(i + 1)番目のライン単一空間とそのような0 <= AI <= BI <= 50000ことと、1 <= CI <= BIにより分離Bi及びCI、三つの整数aiを含ま - AI + 1。
 

 

出力
出力は、各I = 1,2、...、nについて、設定されたZ共有間隔を有する少なくともCI要素[AI、BI]の最小サイズに等しい正確に一つの整数を含んでいます。
 

 

サンプル入力
5 3 7 3 8 10 3 6 8 1 1 3 1 10 11 1
 

 

サンプル出力
6
************************************************** ************************************************** ***********************
問題は、最短図問題点を見つけることにあるトピックになるように差動nおよび制約制約のm個のデータのセットを見つけるには、単に式の三角形を満たすための条件、請求XI-XJ <= BS spfaを満たしています範囲を見つけるために、フルタイムマップの建物を構築する(ソースを見つけます。)。
************************************************** ************************************************** ***********************
1の#include <iostreamの>
 2の#include < ストリング >
 3の#include <CStringの>
 4の#include <cstdioを>
 5の#include <CCTYPE>
 6の#include <キュー>
 7の#include <積層>
 8  使って 名前空間STD。
9  CONST  INT INF = 999999999 10  CONST  INT MAXN = 50050 11  INTは[MAXN] [MAXN]、VIS DIS、N。
12  int型AA、BB;
13  構造体ノード
 14  {
 15      int型のV;
16       int型の値。
17  } TMP。
18ベクター<ノード> 地図【MAXN]。
19  ボイド spfa()// 求最长路
20  {
 21      のmemset(VIS、0はsizeof (VIS))。
22      キュー< 整数 > Q;
23      のためには、int型がAA =、それ<= BB;それ++ 24の       DIS [それ] = - INF。
25      しばらく(!Q.empty())
 26      Q.pop();
27      Q.push(AA)。
28     VIS [AA] = 1 29の      DIS [AA] = 0 ;
30      ながら(!Q.empty())
 31      {
 32          INT GS = Q.front()。
33            Q.pop()。
34            VIS [GS] = 0 ;
35            INT SN = マップ[GS] .size()。
36          のためにint型、それは= 0 ;それ<SNそれ++ 37          {
 38                であれば((DIS <DIS [GS] + [GS] [それ] .V [MAP] [それ] .VALUE)[GS] MAP)
 39                {
 40                   DIS [マップ[GS] [それ] .V = DIS [GS] + [GS] [それ] .VALUEをマッピングします。
41                    であれば(VIS [マップ[GS] [それを] .V] == 0 42                    {
 43                        Q.push(地図[GS] [それ] .V)。
44                        VIS [地図[GS] [それ] .V] = 1 45                    }
 46                }
 47          }
 48      }
 49  }
 50  のint main()の
 51  {
 52      のscanf(" %d個"、&N)
53      INT ST、EN、ワット。
54      AA = MAXN。
55      BB = - 1 56の     // 满足不等式S [EN] -s [ST-1]> = W。
57      のためには、int型 i = 1 ; iが<= N; iが++ 58      {
 59          のscanf(" %D%D%D "、およびST&EN、&W)。
60          であれば(ST <AA)AA = ST。
61          であれば((JA + 1)> BB)BB = EN + 1 62          tmp.value = W。
63          tmp.v = EN + 1 64         地図[ST] .push_back(TMP)。
65  
66      }
 67      // 0 <= sの[I + 1] [i]は<= 1〜S 
68      のためのint型がAAを=;それ<= BB;それ++ 69      {
 70          // 添加0边和-1边
71          tmp.value = 0 72          tmp.v =これ+ 1 73          地図【それ】.push_back(TMP)。
74          tmp.value = - 1 75          tmp.v = こと。
76          地図[これ+ 1 ] .push_back(TMP)。
77      }
 78      spfa()。
79      のprintf(" %Dの\のN- "、DIS [BB]); // 最長辺が最大範囲の結果である
80      リターン 0 ;
 81 }
コードの表示

ちょっと待って!質問を磨きます!

ます。https://www.cnblogs.com/sdau--codeants/p/3352113.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34417635/article/details/93432931