公式
A - 噂の広がり / Spread of Rumors 解説
by
A - 噂の広がり / Spread of Rumors 解説
by
MMNMM
初心者の方へ
- AtCoder をはじめたばかりで何をしたらよいか分からない方は、まずは practice contest の問題A「Welcome to AtCoder」を解いてみてください。基本的な入出力の方法が載っています。
- また、プログラミングコンテストの問題に慣れていない方は、AtCoder Beginners Selection の問題をいくつか解いてみることをおすすめします。
- C++入門 AtCoder Programming Guide for beginners (APG4b) は、競技プログラミングのための C++ 入門用コンテンツです。
- Python入門 AtCoder Programming Guide for beginners (APG4bPython) は、競技プログラミングのための Python 入門用コンテンツです。
それぞれの生徒が現在噂を知っているかどうかを配列などで管理し、for 文などを使って \(M\) 件の記録を順に処理することでこの問題を解くことができます。
実装例は以下のようになります。
#include <iostream>
#include <vector>
using namespace std;
int main() {
int N, M;
cin >> N >> M;
// know[i] := 出席番号 i の生徒が噂を知っている
vector<int> know(N);
know[0] = 1; // はじめは出席番号 0 の生徒が噂を知る
for (int i = 0; i < M; ++i) {
int a, b;
cin >> a >> b;
if (know[a]) { // 出席番号 a の生徒が噂を知っていれば
know[b] = 1; // 出席番号 b の生徒が噂を知る
}
}
int ans = 0;
for (int i = 0; i < N; ++i) {
ans += know[i];
}
cout << ans << endl;
return 0;
}
N, M = map(int, input().split())
# know[i] := 出席番号 i の生徒が噂を知っている
know = [0 for i in range(N)]
know[0] = 1 # はじめは出席番号 0 の生徒が噂を知る
for i in range(M):
a, b = map(int, input().split())
if know[a]: # 出席番号 a の生徒が噂を知っていれば
know[b] = 1 # 出席番号 b の生徒が噂を知る
print(sum(know))
投稿日時:
最終更新:
