반응형
https://www.acmicpc.net/problem/9470
9470번: Strahler 순서
지질학에서 하천계는 유향그래프로 나타낼 수 있다. 강은 간선으로 나타내며, 물이 흐르는 방향이 간선의 방향이 된다. 노드는 호수나 샘처럼 강이 시작하는 곳, 강이 합쳐지거나 나누어지는 곳
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
vector<int> adj[1001];
vector<int> point[1001];
int degree[1001];
int val[1001];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int t;
cin >> t;
for (int T = 0; T < t; T++) {
int k, m, p;
cin >> k >> m >> p;
memset(val, 0, sizeof(val));
memset(degree, 0, sizeof(degree));
for (int i = 0; i < 1001; i++) {
adj[i].clear();
point[i].clear();
}
for (int i = 0; i < p; i++) {
int a, b;
cin >> a >> b;
adj[a].push_back(b);
degree[b]++;
}
queue<int> Q;
for (int i = 1; i <= m; i++) {
if (degree[i] == 0) {
Q.push(i);
val[i] = 1;
}
}
int ans = 0;
while (!Q.empty()) {
int x = Q.front(); Q.pop();
for (auto nx : adj[x]) {
point[nx].push_back(val[x]);
if (--degree[nx] == 0) {
Q.push(nx);
sort(point[nx].begin(), point[nx].end());
int val_nx = point[nx][point[nx].size() - 1];
if (point[nx].size() >= 2 && val_nx == point[nx][point[nx].size() - 2]) {
val[nx] = val_nx + 1;
}
else {
val[nx] = val_nx;
}
ans = max(ans, val[nx]);
}
}
}
cout << k << ' ' << ans << '\n';
}
return 0;
}
반응형
'Algorithm > problem' 카테고리의 다른 글
백준 3665번 : 최종 순위 - 위상정렬 C++ 문제풀이 및 코드 (0) | 2022.02.24 |
---|---|
백준 2637번 : 장난감 조립 - 위상정렬 dp C++ (0) | 2022.02.24 |
백준 1005번 : ACM Craft - 위상정렬 dp C++ (0) | 2022.02.24 |
백준 1766번 : 문제집 - 위상정렬 C++ 코드 (0) | 2022.02.24 |
백준 1516번: 게임 개발 - 위상정렬 dp C++ 코드 (0) | 2022.02.24 |