알고리즘 문제/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
반응형