JZOJ 3423. [NOIP2013 시뮬레이션] Cl2를 Vani과 숨바꼭질

시간 제한 : 1000 MS 메모리 제한 : 26만2천1백44킬로바이트 자세한 제한 

기술

vani 및 CL2 숨기고 ...... 숲 속에서 추구

이러한 숲이 도로를 가지고 집에게 N, M 바 있고, 방향성 비순환 그래프를 형성했다.

우즈보기를 차단할 정도로 매우 조밀 한 나무,하지만 길을 따라 보았다하지만 가시성이다. 당신이 가고 도로를 따라 집에서 B에 도달 할 수 있다면, A 및 B에있는 사람들은 서로를보고 할 수 있습니다.

두 CL2 사이에 지금이 집에서 선택할 수 있으며, 블록 N, 블록 K는 숨어있는 장소뿐만 아니라 집 안에 숨어있는 장소를 방지하기 위해, 찾고으로 CL2의 vani에서 드문로 숨어의 K 포인트의 vani, CL2 요구 사항을 볼되고 경로가 연결되어 있지 않습니다.

어렵게 자신의 vani을 찾을 수 있도록하기 위해, CL2 포인트의 최대 수를 숨기도록 선택할 수 있습니다 알고 싶어?

입력

두 정수의 제 N 라인, M.

다음 두 행의 각 정수를 M 행의 X, Y는 X와 Y로부터 직접 경로를 나타낸다.

산출

정수 K가 선택한 시점까지 숨어의 수를 나타냅니다.

샘플 입력

4 4 
1 2
3 2
3 4
4 2

샘플 출력

데이터 제약

데이터, N≤10, M <= 20의 20 %.

데이터, N≤100, M <= 1000의 60 %.

데이터의 100 %, N≤200, M <= 30000,1 < =의 X, Y는 <= N.

 

1 #INCLUDE <iostream>
 2 #INCLUDE <cstdio>
 3 #INCLUDE <CString을>
 4  #DEFINE maxn 210
 5  이용  스페이스 성병;
6  INT의 N, m, g [maxn] maxn, ANS 경기 [maxn];
7  BOOL [maxn] F;
8  INT 의 Dfs ( INT를 들)
 (9)  {
 10       ( int로 난 = 1 난 ++; i가 N = < )
 (11)        의 경우 (F [I] == 0 && g [S] [I] == 1 )
 12          {
 13            (F)의 [ I =1 ;
14            의 경우 (매치 [I] == 0 || 의 Dfs (매치 [I]))
 15              {
 16                매치 [I] =에서 S;
17                 1 ;
18              }
 19          }
 20      반환  0 ;
21  }
 22  INT 의 main ()
 23  {
 24      는 scanf ( " %의 D % d에 " , N, m);
25      INT의 X, Y, ANS = N;
26       ( INT I = 1; I <= m; 내가 ++ )
 27        {
 28            는 scanf ( " % d 개 %의 D ' , X, ) Y;
29            g의 [X] [Y]는 = 1 ;
30        }
 31       ( INT에 K = 1 ; K <N = k 번째 ++ )
 32         ( INT I = 1 ; I <= N; 나는 ++ )
 33           ( INT J = 1 ; J <= N; J ++ )
 34의            g의 [ I] [J] = g [I] [J] || (g [I] [K] && g [K] [J]);
35       ( int로 I =1 ; 나는 <= N; ++ i가 )
 36        {
 37            memset 함수 (F, 0 , sizeof 연산자를 (F));
38            ans- = 의 Dfs (I);
39        }
 40      의 printf ( " % D \ 없음 " , ANS);
41      반환  0 ;
42 }

추천

출처www.cnblogs.com/anbujingying/p/11297601.html