๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 6416๋ฒˆ - ํŠธ๋ฆฌ์ธ๊ฐ€?

by ์•ˆ์ฃผํ˜• 2022. 6. 30.

๋ฌธ์ œ

 

6416๋ฒˆ: ํŠธ๋ฆฌ์ธ๊ฐ€?

ํŠธ๋ฆฌ๋Š” ๊ต‰์žฅํžˆ ์ž˜ ์•Œ๋ ค์ง„ ์ž๋ฃŒ ๊ตฌ์กฐ์ด๋‹ค. ํŠธ๋ฆฌ๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ๋Š” ๋น„์–ด ์žˆ๊ฑฐ๋‚˜(๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ 0๊ฐœ), ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ 1๊ฐœ ์ด์ƒ์ด๊ณ  ๋ฐฉํ–ฅ ๊ฐ„์„ ์ด ์กด์žฌํ•˜๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค.

www.acmicpc.net

 

์ฝ”๋“œ

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


vector<int>indegree[MAX + 1];
unordered_map<int, int> outdegree; // node, cnt
unordered_set<int> node;
int edge_cnt = 0;

int remove_leaf() {
	queue<int> q;
	int remove_cnt = 0;

	for (auto cur : node) {
		if (outdegree[cur] == 0 && indegree[cur].size() == 1) {
			q.push(cur);
		}
	}

	while (!q.empty()) {
		remove_cnt++;
		int nod = q.front();
		q.pop();

		if (indegree[nod].size() == 1) {
			vector<int> nexts;
			for (auto next : indegree[nod]) {
				nexts.push_back(next);
			}
			for (auto next : nexts) {
				outdegree[next]--;
				if (outdegree[next] == 0 && indegree[next].size() == 1) {
					q.push(next);
				}
			}
		}
	}
	return remove_cnt;
}


void init() {
	outdegree.clear();
	node.clear();
	for (int i = 0; i < MAX; i++) indegree[i].clear();
	edge_cnt = 0;
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	int a, b;
	int num = 1;
	while (cin >> a >> b) {
		if (a == -1 && b == -1) break;
		else if (a == 0 && b == 0) {
			int leaf_cnt = remove_leaf();
			if (node.size() == 0 || node.size() == leaf_cnt + 1)  cout << "Case " << num << " is a tree."<<'\n';
			else cout << "Case " << num << " is not a tree." << '\n';
			num++;
			init();
		}
		else {
			edge_cnt++;
			if (a != b) outdegree[a]++;
			indegree[b].push_back(a);
			node.insert(a);
			node.insert(b);
		}

	}
}

 

ํ’€์ด

ํ•ด๊ฒฐ ์•„์ด๋””์–ด๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ์ง€์›Œ๊ฐ€๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ : https://hanbi97.tistory.com/337

๋งŒ์•ฝ ํŠธ๋ฆฌ์ผ ๊ฒฝ์šฐ์—๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ๊ณ„์† ์ œ๊ฑฐํ•ด ๊ฐ”์„ ๋•Œ ๋ฃจํŠธ ๋…ธ๋“œ๋งŒ ๋‚จ๊ฒŒ ๋  ๊ฒƒ์ด๊ณ , ์ตœ์ข…์ ์œผ๋กœ ์ง€์šด ๋…ธ๋“œ ๊ฐœ์ˆ˜ + 1(๋ฃจํŠธ ๋…ธ๋“œ) = ์ด ๋…ธ๋“œ ๊ฐœ์ˆ˜ ์ผ ๋•Œ tree๊ฐ€ ๋งž๋‹ค ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€