AtCoder Grand Contest 002 B - Box and Ball
- 問題
- 解法
シュミレーションで間に合う。
各箱に赤のボールが入っているかどうかということと、各箱のボールの数を記憶すればよい。
に赤いボールが入っている時に操作を行えば、に赤いボールが入っている可能性があることになる。操作をおこなって箱に入っているボールの数が0個になるならに赤いボールが入っている可能性はなくなる。
#include <iostream> #include <string> #include <algorithm> #include <cstdio> #include <vector> #include <queue> #include <set> #include <numeric> #include <cmath> using namespace std; typedef long long int ll; #define all(x) x.begin(),x.end() const ll mod = 1e9+7; const ll INF = 1e9; const ll MAXN = 1e9; int main() { int n,m; cin >> n >> m; vector<int> x(m),y(m); for(int i = 0; i < m; i++){ cin >> x[i] >> y[i]; } vector<int> num(n+1),red(n+1); red.assign(red.size(),0); num.assign(num.size(),1); red[1] = 1; for(int i = 0; i < m; i++){ num[x[i]]--; num[y[i]]++; if(red[x[i]] == 1){ red[y[i]] = 1; if(num[x[i]] == 0) red[x[i]] = 0; } } int ans = 0; for(int i = 1; i <= n; i++){ if(red[i]==1)ans++; } cout << ans << endl; return 0; }