範例程式碼 uva11518
//uva11518
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int knockDown(int from, int down[], vector<vector<int> > &road){
int count = 0;
queue<int> q;
// start bfs
q.push(from);
while (!q.empty()){
int len = q.size();
for (int i = 1; i <= len; i++){
int domino = q.front();
if (!down[domino]){
for (int j = 0; j < road[domino].size(); j++)
q.push(road[domino][j]);
down[domino] = 1;
count++;
}
q.pop();
}
}
return count;
}
int main() {
int t, n, m, l;
cin >> t;
while(t--){
int from, to;
vector<vector<int> > road(10001);
cin >> n >> m >> l;
for (int i = 1; i <= m; i++){
cin >> from >> to;
road[from].push_back(to);
}
int down[10001] = {0}, total = 0;
for (int i = 1; i <= l; i++){
cin >> from;
//cout << knockDown(from, down, road) << "\n";
total += knockDown(from, down, road);
}
cout << total << "\n";
}
}