Graph Destruction
問題
E – Graph Destruction
プログラミング初級者から上級者まで楽しめる、競技プログラミングコンテストサイト「AtCoder」。オンラインで毎週開催プログラミングコンテストを開催しています。競技…
記録
- 2022/3/14 解法途中まで。
解法
- Union-Find。
コード例
#include <bits/stdc++.h> using namespace std; #include <atcoder/all> using namespace atcoder; using ll = long long; using P = pair<int, int>; #define rep(i, n) for(int i = 0; i < (n); ++i) // using mint = modint998244353; // using mint = modint1000000007; // const int mod = 1000000007; // const ll INF = 1LL << 60; // const int INF = 1001001001; int main() { int N, M; cin >> N >> M; vector<vector<int>> point(N); dsu uf(N); rep(i, M) { int A, B; cin >> A >> B; --A; --B; point[A].push_back(B); } vector<int> ans(N); int cnt = 0; for(int i = N - 1; 0 <= i; --i) { ans[i] = cnt; cnt++; int n2 = point[i].size(); for(int j = 0; j < n2; ++j) { int t = point[i][j]; if(!uf.same(i, t)) { uf.merge(i, t); cnt--; } } } rep(i, N) { cout << ans[i] << endl; } return 0; }