반응형

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

 

1953번: 팀배분

첫줄에는 청팀의 사람의 수를 출력하고, 그리고 둘째 줄에는 청팀에 속한 사람들을 오름차순으로 나열한다. 그리고 셋째 줄과 넷째 줄은 위와 같은 방법으로 백팀에 속한 인원의 수, 백팀에 속

www.acmicpc.net

 

싫어하는 관계를 그래프로 만들고,

현재 노드와 다음 노드를 다른 팀으로 배정해주었습니다.

 

#include <iostream>
#include <vector>
using namespace std;
#define MAX 101

int n, m, k, visit[MAX] = { 0 };
vector<int> haters[MAX];

void dfs(int node, int team) {
	visit[node] = team;
	for (auto nxt : haters[node]) {
		if (visit[nxt]) continue;
		dfs(nxt, -team);
	}
}

int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		scanf("%d", &m);
		while (m--) {
			scanf("%d", &k);
			haters[i].push_back(k);
			haters[k].push_back(i);
		}
	}

	for (int i = 1; i <= n; i++) {
		if (!visit[i]) dfs(i, i % 2 ? 1 : -1);
	}

	vector<int> blue, white;
	for (int i = 1; i <= n; i++) {
		if (visit[i] == 1) blue.push_back(i);
		else white.push_back(i);
	}

	printf("%d\n", blue.size());
	for (auto i : blue) printf("%d ", i);
	printf("\n%d\n", white.size());
	for (auto i : white) printf("%d ", i);
}
반응형

'Algorithm' 카테고리의 다른 글

백준 1240 : 노드사이의 거리  (0) 2021.11.19
백준 15900 : 나무 탈출  (0) 2021.11.19
백준 14675 : 단절점과 단절선  (0) 2021.11.19
백준 4256 : 트리  (0) 2021.11.19
백준 1922 : 네트워크 연결  (0) 2021.11.19

+ Recent posts