본문 바로가기

알고리즘/BOJ

11725번

11725번 - 트리의 부모 찾기


그래프가 주어지고 , 결국 트리의 노드를 1로 하라고 했기 때문에


DFS나 BFS를 이용하여 탐색하면서 부모 노드의 값만 저장해주면 될 것 같다.



발생한 문제점 


cout << numOfparent[i] << endl;  을 정답 출력시  사용하니까 시간제한에 걸렸다.


하지만 이를 


printf("%d\n", numOfparent[i]);


로 바꾸니 시간 안에 통과하여 AC를 받을 수 있었다.


cout<<endl; 이 속도가 조금 느리다는 것은 알았지만 이렇게 시간 제한에 걸리다니.....


1초라는 시간은 너무나 짧은 것 같다... 이것 때문에 시간 초과가 나는 지 모르고 시간을 낭비하다니.. 출력 방식을 바꿔야 하는지 의문이다..


질문 게시판에 글을 좀 올려놔야 겠다.


<정답 코드 - DFS , BFS ( 사용하지 않는 함수 주석처리)>


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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int N;
int numOfparent[100001];
vector<int> v[100001];
bool check[100001];
void bfs(int start)
{
    queue<int> q;
    q.push(start);
    check[start] = true;
 
    while (!q.empty())
    {
        int now = q.front();
        q.pop();
 
        for (int i = 0; i < v[now].size(); i++)
        {
            int next = v[now][i];
 
            if (!check[next])
            {
                check[next] = true;
                numOfparent[next] = now;
                q.push(next);
            }
        }
    }
}
void dfs(int start)
{
    check[start] = true;
 
    for (int i = 0; i < v[start].size(); i++)
    {
        int next = v[start][i];
 
        if (!check[next])
        {
            numOfparent[next] = start;
            dfs(next);
        }
    }
 
    return;
}
int main()
{
    cin >> N;
 
    for (int i = 0; i < N-1; i++)
    {
        int a, b;
        cin >> a >> b;
        v[a].push_back(b);
        v[b].push_back(a);
    }
 
    //dfs(1);
    //bfs(1);
 
    for (int i = 2; i <= N; i++)
    {
        printf("%d\n", numOfparent[i]);
        //cout << numOfparent[i] << endl;
    }
 
    return 0;
}
cs


반응형

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

1967번  (0) 2017.11.23
1167번  (0) 2017.11.23
1991번  (0) 2017.11.23
2146번  (0) 2017.11.23
2178번  (0) 2017.11.23