Codeforces 1278D

暴力

並び替え部、右サイドを維持するために、左端点セットが決意することなく、Nプラス暴力に添加することができ、再びDFS

 

Nホップに追加し、レースの前半の思想が、考えていなかったが、常にあなたが等しいシェアを接続したいポイントをマージしたかった場合は比較的小さく、その後、分解図であります

問題は、ツリーか剛性の思考の裁判官について考えています

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
const  int型 MAXN = 5E5 + 5 int型のn;
int型のmiR [MAXN * 2 ]、VIS [MAXN]。
ベクトル <ペア< int型int型 >> V。
設定 < 整数 > 秒; 
ベクター < INT > G [MAXN]。
ボイド DFS(INT U){
     場合(VIS [U]){
         リターン
    } 
    VIS [U] = 1 ために(オートV:G [U]){ 
        DFS(V)。
    } 
} 
int型のmain(){ 
    scanf関数(" %のD "、&N)
    以下のためにINT iが= 1 ; I <= N; ++ I){
         int型の L、R。scanf関数(" %D%D "、&​​L&R)。
        v.push_back(make_pair(L、R))。
        miR [R] = I。
    } 
    int型 CNT = 0 
    ソート(v.begin()、v.end()); 
    以下のためにINT iが= 0 ; I <v.sizeを(); ++ I){
        もし(CNT == N){
             ブレーク
        } 
        ペア < int型整数 > 0 = V [i]は、
        int型 L = o.first、R = o.second。
        以下のための(!;それ= s.end();自動それはs.lower_bound(l)を= ++ それ){
             場合(* IT> R){
                 ブレーク
            } 
            G [たmiR [R]一back(MIR [ * こと])。
            G [たmiR [ * それ]一back(MIR [R])。
            ++ CNT;
            もし(CNT == N){
                休憩; 
            } 
        } 
        s.insert(R)
    } 
    であれば(CNT = N! - 1 ){ 
        プット(" NO " )。
        リターン 0 ; 
    } 
    DFS(1 )。
    以下のためにINT iが= 1 ; I <= N; ++ I){
         場合(!VIS [I]){ 
            プット(" NO " )。
            リターン 0 ; 
        } 
    } 
    プット(" YES ");
    リターン 0 ; 
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/19992147orz/p/12071112.html