본문 바로가기

개발/알고리즘

피크닉

문제


소들은 피크닉을 갈 예정이다! 각 존의 K(1 <= K <= 100)마리의 소들은 N(1 <= N <= 1,000) 개의 목초지중 하나의 목초지에서 풀을 뜯고 있다. 이 목초지들을 목초지1 … 목초지 N이라고 명명하자. 그 목초지들은 M (1 <= M <= 10,000) 개의 단방향 길로 연결되어 있다. (어떠한 길도 출발지와 도착지가 같지 않다.)


소들은 그들의 피크닉동안 같은 목초지에서 모이기를 원한다. 하지만 몇마리의 소들은 모든 목초지에 도달할 수 없을 가능성이 있다.(단방향 도로이기 때문에) 소들을 도와 얼마나 많은 목초지에서 모든 소들이 모일 수 있는지 계산해주자.




입력


첫번째 줄은 세개의 정수가 공백으로 구분되어 입력되어진다. :K,N,M


2번째줄부터 K+1번째 줄까지는 K마리의 소들의 처음 풀을 뜯고있는 위치가 각 줄에 하나씩 주어진다.


K+2번째 줄부터 M+K+1번째 줄까지는 단방향 도로의 정보 시작점S 와 끝점E가 입력으로 주어진다.




출력


모든 소가 모일 수 있는 가능한 목초지의 수를 출력해주자




힌트


예제 입력


2 4 4

2

3

1 2

1 4

2 3

3 4


예제 출력


2


힌트

모든 소들은 목초지 3,4에서 모일 수 있다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
  
int K, N, M;
vector<int> pathV[1001];
int cow[101];
int totalVisit[1001];
  
void BFS(int start) {
    queue<int> visitQ;
    visitQ.push(start);
    int visit[1001];
    for (int i = 1; i <= 1000; i++) {
        visit[i] = 0;
    }
    visit[start] = 1;
  
    while (!visitQ.empty()) {
        int num = visitQ.front();
        totalVisit[num] += 1;
        visitQ.pop();
        vector<int>::iterator iter;
        for (iter = pathV[num].begin(); iter != pathV[num].end(); iter++) {
            int next = *iter;
            if (visit[next] == 0) {
                visit[next] = 1;
                visitQ.push(next);
            }
        }
    }
}
  
int main() {
    cin >> K >> N >> M;
    for (int k = 1; k <= K; k++) {
        cin >> cow[k];//소의 위치
    }
    int s, e;
    for (int m = 1; m <= M; m++) {
        cin >> s >> e;
        pathV[s].push_back(e);
    }
    for (int k = 1; k <= K; k++) {
        BFS(cow[k]);
    }
      
    int cnt = 0;
    for (int i = 1; i <= N; i++) {
        if (totalVisit[i] == K) {
            cnt++;
        }
    }
    cout << cnt << endl;
    return 0;
}


'개발 > 알고리즘' 카테고리의 다른 글

가장 먼 두 도시  (0) 2016.12.03
보물섬  (0) 2016.12.03
유령선  (0) 2016.12.03
위상 정렬  (0) 2016.12.03
그래프 순회  (0) 2016.12.03