[AOJ] GRL_4_B トポロジカルソート
問題
方針
閉路のない有効グラフに対して頂点を一列に整列させることができます。
コード
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { int N, M; cin >> N >> M; int s[M], t[M]; vector<int> adj[N]; for (int i = 0; i < M; i++) { cin >> s[i] >> t[i]; adj[s[i]].push_back(t[i]); } int indeg[N]{}; int flag[N]{}; for (int i = 0; i < N; i++) { for (int j = 0; j < adj[i].size(); j++) { int u = adj[i][j]; indeg[u]++; } } deque<int> q; vector<int> id; for (int i = 0; i < N; i++) { if (indeg[i] == 0 && flag[i] == 0) { q.push_back(i); while (!q.empty()) { int u = q.front(); id.push_back(u); q.pop_front(); flag[u] = 1; for (int j = 0; j < adj[u].size(); j++) { int v = adj[u][j]; indeg[v]--; if (indeg[v] == 0 && flag[v] == 0) { flag[v] = 1; q.push_back(v); } } } } } for (int i : id) { cout << i << "\n"; } return 0; }
ディスカッション
コメント一覧
まだ、コメントがありません