安定したメンバー

トピックリンク:http://hihocoder.com/problemset/problem/1343

 

タイトル効果:有向非巡回グラフに、ポイントが削除ポイント(またはそれ自体をポイントが0であることはできない)場合にのみ不安定であると定義され、それは点0と通信できない、安定した他のポイントに比べて、図シークいくつかの安定的なポイントがあります。

 

アイデア:

ポイントは安定点である場合、それのポイントに到達するためのパスは確かつ以上(およびパスなしの交差点)です。我々は、染色方法を採用した場合(すべて同じことが起こっている私たちは、それは十字架の道を示しているかのように)、その親ノードを横断して、ノード上にあるものと同じではありません。

各頂点vについて、染色方法を使用して:それに続く頂点トラバーサル方法を用いて、すなわち、頂点vについて、トポロジカルソートを、順次染色しました。後続の頂点は、その親の頂点の全てが頂点vに染色されているという条件をキューに入れられました。

 

1の#include <math.h>の
 2の#include <stdio.hの>
 3の#include <STDLIB.H>
 4の#include <iostreamの>
 5の#include <アルゴリズム>
 6の#include < ストリング >
 7の#include < 文字列・H>
 8の#include <ベクトル>
 9の#include <地図>
 10の#include <積層>
 11の#include < セット >
 12の#include <キュー>
13  
14  
15  の#define LL長い長い
 16  の#define INF 0x3f3f3f3f
 17  の#define LSのNOD << 1
18個 の#define RS(NOD << 1)+1
 19  
20  CONST  INT MAXN = 2E5 + 10 21  CONST  INT MOD = 142857 22  
23  のint COL [MAXN]、UN [MAXN]。
24のstd ::ベクトル< 整数 > 息子[MAXN]、親[MAXN]。
25  
26  ブール all_same(INT今、INT 色){
 27      INT LEN = 親[今] .size()。
28      のためにINTは iは= 0 ; I <LEN; I ++ ){
 29         もし(!COL [親[今] [I]] = 色)
 30              リターン はfalse ;
31      }
 32      リターン 33  }
 34  
35  
36  
37  空隙 topsort(int型X){
 38      であれば(COL [X] =!0 39          リターン;
40      COL [X] = X。
41      のstd ::キュー< 整数 > Q;
42      q.push(X)。
43      ながら(!q.empty()){
 44          INT今=q.front();
45          q.pop()。
46          INT LEN = 息子[今] .size()。
47          のためのINTは私= 0 ; I <LEN; I ++ ){
 48              であれば(all_same(息子[今] [i]は、COL [今])){
 49                  COL [息子[今] [I] = 今COL [ ];
50                  q.push(息子[今] [I])。
51                  国連[息子[今] [I] = 1 52              }
 53          }
 54      }
 55  }
 56  
57  
58  
59  int型のmain(){
60      INT N。
61      のscanf(" %d個"、&N)
62      のためにINT iは= 1 ; iが<= N; I ++ ){
 63          のint K、ID。
64          のscanf(" %dの"、&K)。
65          一方(k-- ){
 66              のscanf(" %dの"、&ID)。
67              親[I] .push_back(ID)。
68              息子[ID] .push_back(I)。
69          }
 70      }
71      のためにINT iは= 1 ; iが<= N; I ++ 72          topsort(I)。
73      INT ANS = 0 74      のためにINT iが= 1 ; iが<= N; I ++ ){
 75の          ANS + = 未[I]は、
76      }
 77      のprintf(" %dの\ N "、N- ANS)。
78      リターン 0 79 }

 

おすすめ

転載: www.cnblogs.com/-Ackerman/p/11979796.html