기술 블로그

1953번 팀배분 본문

알고리즘 문제/BOJ

1953번 팀배분

parkit 2021. 8. 31. 11:16
728x90
반응형

 

https://www.acmicpc.net/problem/1953

 

이분 그래프 문제이다.

 

참고 문제 : https://www.acmicpc.net/problem/1707

참고 풀이 : https://hsdevelopment.tistory.com/74

 

 

#include<bits/stdc++.h>

using namespace std;

#define MAX 101

int N, M, T;
vector<int> v[MAX];
vector<int> a, b;
int color[MAX];

bool go(int now, int next)
{
    for (auto i : v[now]) {
        if (i == next) {
            return false;
        }
    }
    return true;
}

void dfs(int vertex, int nodeColor)
{
    color[vertex] = nodeColor;

    for (auto hateNode : v[vertex]) {
        if (color[hateNode] == 0) {
            dfs(hateNode, nodeColor * -1);
        }
    }
}

int main()
{
    //freopen("C:\\Users\\park7\\Desktop\\lazy_bronze\\2.in", "r", stdin);
    cin.tie(0);

    scanf("%d", &N);

    for (int i = 1; i <= N; i++) {
        int cnt = 0, hate = 0;
        scanf("%d", &cnt);
        for (int j = 0; j < cnt; j++) {
            scanf("%d", &hate);
            v[i].push_back(hate);
            v[hate].push_back(i);
        }
    }

    for (int i = 1; i <= N; i++) {
        if (color[i] == 0) {
            dfs(i, 1);
        }
    }

    printf("%d\n", count(color, color + MAX, 1));
    for (int i = 1; i <= N; i++) {
        if (color[i] == 1) {
            printf("%d ", i);
        }
    }
    printf("\n");

    printf("%d\n", count(color, color + MAX, -1));
    for (int i = 1; i <= N; i++) {
        if (color[i] == -1) {
            printf("%d ", i);
        }
    }
    printf("\n");

    return 0;
}

 

 

728x90
반응형

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

1525번 퍼즐  (0) 2021.09.11
2571번 색종이 - 3  (0) 2021.09.04
17836번 공주님을 구해라!  (0) 2021.08.31
16493번 최대 페이지 수  (0) 2021.08.30
3067번 Coins  (0) 2021.08.30