반응형
https://www.acmicpc.net/problem/2458
2458번: 키 순서
1번부터 N번까지 번호가 붙여져 있는 학생들에 대하여 두 학생끼리 키를 비교한 결과의 일부가 주어져 있다. 단, N명의 학생들의 키는 모두 다르다고 가정한다. 예를 들어, 6명의 학생들에 대하여
www.acmicpc.net
1.문제설명
서로 키를 비교한 결과를 입력으로 주었을 때
키의 순서를 알 수있는 노드가 몇 개인지 구하는 문제이다.
2.접근방법
해당 노드의 키 순서를 알려면
해당 노드를 제외한 모든 노드와 비교가 되어야 한다.
플로이드 와샬 알고리즘으로 모든 노드간 거리를 구했을 때
만약 거리[a][b] 와 거리[b][a]가 모두 비교가 되지 않은 채 INF 값이 있다면
a와 b는 순서를 알 수 없다.
3.문제풀이코드 C++
#include <bits/stdc++.h>
using namespace std;
int n, m, dist[501][501];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
memset(dist, 0x3f, sizeof(dist));
cin >> n >> m;
for (int i = 1; i <= n; i++) {
dist[i][i] = 0;
}
for (int i = 0; i < m; i++) {
int a, b;
cin >> a >> b;
dist[a][b] = 1;
}
for (int k = 1; k <= n; k++) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);
}
}
}
int ans = 0;
for (int i = 1; i <= n; i++) {
bool canKnow = true;
for (int j = 1; j <= n; j++) {
if (dist[i][j] > 10000) {
if (dist[j][i] > 10000) {
canKnow = false;
}
}
}
if (canKnow) ans++;
}
cout << ans << '\n';
return 0;
}

반응형
'Algorithm > problem' 카테고리의 다른 글
백준 1507번 : 궁금한 민호 - 플로이드 활용 C++ (0) | 2022.02.17 |
---|---|
백준 1956번 : 운동 - 플로이드와샬 C++ (0) | 2022.02.17 |
백준 2610: 회의준비 - 플로이드–와샬 C++ (0) | 2022.02.16 |
백준 8983번 사냥꾼 - 이분 탐색 활용 C++ (0) | 2022.02.16 |
백준 6087번 : 레이저 통신 - 다익스트라 C++ (0) | 2022.02.16 |