トピックリンク: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 }