GALLERY 문제 질문드립니다.(_ _)

  • skan1543
    skan1543

    GALLERY
    트리에서 지배집합을 찾는문제라는 책의 솔루션을 참고하여

    구현하였습니다.

    그래프를 깊이를 우선으로 하며 탐색하면서

    먼저 방문되는것이 부모가 되게끔 트리를 그리며,

    자신이랑 연결된 자신의 자손중에(아직 방문안된)
    CCTV가 설치되어있는 놈이 한명도 없거나
    아예 자식이 없는 경우에, 자신에게 CCTV를 설치하도록 하였습니다.

    흠.. 간단한 솔루션인데.. 어디가 틀린걸까요? ㅠㅠ

    #include<stdio.h>
    #include<vector>
    
    using namespace std;
    
    int G, H,answer;
    vector<vector<int> > adj;   // 간선들을 저장.
    bool visited[1005] = { 0, };
    
    bool needC(int root) // true면 카메라 설치해야됨, false면 불필요
    {
        visited[root] = 1;
        bool check = 0;
        for (int i = 0; i < adj[root].size(); i++)
        {
            if (visited[adj[root][i]] == false){
                if (needC(adj[root][i]) == false)
                    check = 1;
            }
        }
        if (check == 1 || adj[root].size()==0)
        {
            answer++;
            return true;
        }
        else return false;
    }
    int main()
    {
        freopen("input.txt", "r", stdin);   
        int t;
        scanf("%d", &t);
        while (t--)
        {
            scanf("%d %d", &G, &H);
    
            adj.resize(G);
            int x, y;
            for (int i = 0; i < H; i++){
                scanf("%d %d", &x, &y);
                adj[x].push_back(y);
                adj[y].push_back(x);
            }
            for (int i = 0; i < G; i++) visited[i] = 0;
            for (int i = 0; i < G;i++) 
                if (visited[i] == 0)needC(i);
            printf("%d\n", answer);
            answer = 0;
            adj.clear();
        }
        return 0;
    }
    

    8년 전
2개의 댓글이 있습니다.
  • SinAska
    SinAska

    저도 구현하면서 많은 시행착오가 있었는데요
    빈 헛점이 있네요, 책에서는 노드에 대해 3가지 상태값을 갖습니다.
    각 노드는 실제로 3가지의 상태를 갖을 수 있는데요,
    예를들어 A라는 노드가 있다고 합시다.
    A라는 노드에 카메라가 설치되어있을 수 있고,
    또는 자식노드에 카메라가 설치되어 있어서 감시중인상태일 수 있으며
    자식 및 자기자신모두 에 카메라가 설치되어있지않아 방치(?) 상태
    일 수 있습니다. 위 3가지 상태 값에 대해 적절히 카운팅하지않으면
    당연히 오답이 나올수 밖에없습니다.


    8년 전 link
  • skan1543
    skan1543

    아아... 그렇군요!! 감사합니다 (_ _) 자식노드에 카메라가 설치되 있는지 아닌지만 중요한게 아니네요..


    8년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.