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;
}
'알고리즘 > 알고리즘' 카테고리의 다른 글
[C++] 프로그래머스 : 완주하지 못한 선수 (0) | 2022.01.03 |
---|---|
[C++] 백준 20058번 : 마법사 상어와 파이어스톰 (0) | 2021.10.09 |
[C++] 백준 1800번 : 인터넷설치 (0) | 2021.09.10 |
[C++]백준 1197번 : 최소 스패닝 트리 (0) | 2021.09.09 |
[C++]백준 8972번 : 미친 아두이노 (0) | 2021.09.04 |