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