ABC126-E : 1 or 2 작성일 2019-05-25 https://atcoder.jp/contests/abc126/tasks/abc126_e 뭔가 복잡하게 써놓았지만 결국은 연결성 판단 문제이다. union-find나 dfs로 풀 수 있다. dfs는 종료조건을 먼저 체크해야 짧아진다. 123456789101112131415161718192021222324252627282930313233343536#include <cstdio> #include <vector> using namespace std; class Problem { public: int N, M, x, y, z; vector<int> adj[100002]; vector<int> visit; Problem() { scanf("%d%d", &N, &M); visit = vector<int>(N+10); for(int i = 0; i < M; i++) { scanf("%d%d%d", &x, &y, &z); adj[x].push_back(y); } } int dfs(int n) { if (visit[n]++) return 0; for(int d: adj[n]) dfs(d); return 1; } void solve() { int ans = 0; for(int i = 1; i <= N; i++) ans += dfs(i); printf("%d", ans); } }; int main() { Problem().solve(); }