본문 바로가기
알고리즘/알고리즘

[C++] 백준 10159번 : 저울

by 두둠칫 2021. 9. 10.

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

 

10159번: 저울

첫 줄에는 물건의 개수 N 이 주어지고, 둘째 줄에는 미리 측정된 물건 쌍의 개수 M이 주어진다. 단, 5 ≤ N ≤ 100 이고, 0 ≤ M ≤ 2,000이다. 다음 M개의 줄에 미리 측정된 비교 결과가 한 줄에 하나씩

www.acmicpc.net

 

1. 접근 : 모든 정점에서 모든 정점으로 갈 수 있는지 판별 -> 플로이드와샬

가중치 없이 갈 수 있으면 true

 

#include <iostream>
#include <vector>
#include <cstring>

using namespace std;

int N, M, a, b;
vector<int> g[101];
int d[101][101];

int main() {

	ios::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	
	memset(d, 0, sizeof(d));

	cin >> N >> M;
	for (int i = 0; i < M; i++) {
		cin >> a >> b;
		g[b].push_back(a);
		d[b][a] = 1;
	}

	for (int i = 1; i <= N; i++) {

		for (int j = 1; j <= N; j++) {
			for (int k = 1; k <= N; k++) {
				if (i != j && i != k && j != k) {
					if (d[j][i] && d[i][k]) d[j][k] = 1;
				}
			}
		}

	}

	for (int i = 1; i <= N; i++) {
		int cnt = 0;
		for (int j = 1; j <= N; j++) {
			if (i != j && !d[i][j] && !d[j][i])
				cnt++;
		}
		cout << cnt << "\n";
	}

	return 0;
}