【機械試験練習】【C++】【PTA A 1076 Forwards on Weibo】


#include
#include
#include
#include
using namespace std;
const int MAXN = 1010;

//         
vector<int> adj[MAXN];  //           ,         
bool inq[MAXN] = {false};


int N = 0, L = 0; 
int follow_num;
int master_idx;

int user_cnt = 0;

void __bfs(int x){
	user_cnt = 0;
	queue<int> q;
	q.push(x);
	inq[x] = true;
	//printf("inq %d
", x);
int lay = 0; while(!q.empty()){ int lay_len = q.size(); //printf("------------------lay %d
", lay);
while(lay_len --){ int tmp = q.front(); q.pop(); //printf("-pop %d
", tmp);
// for(int i = 0; i < adj[tmp].size(); i++){ int ind_flw = adj[tmp][i]; if(!inq[ind_flw]){ //printf("inq %d
", ind_flw);
inq[ind_flw] = true; q.push(ind_flw); user_cnt ++; // , } } } lay ++; // if(lay == L){ break; } } } vector<int> sender; int cnt = 0; void bfs_for_map(){ for(int i = 0; i < sender.size(); i++){ //printf("------visit %d
", sender[i]);
__bfs(sender[i]); // visit fill(inq, inq + N + 1, false); printf("%d", user_cnt); if(i != sender.size() - 1){ printf("
"
); } } } int main(){ scanf("%d %d", &N, &L); // for(int i = 1; i <= N; i++){ scanf("%d", &follow_num); while(follow_num --){ scanf("%d", &master_idx); adj[master_idx].push_back(i); } } // // // // // for(int i = 1; i <= N; i ++){ // if(adj[i].size() == 0) printf("0"); // for(int j = 0; j < adj[i].size(); j++){ // printf("%d ", adj[i][j]); // } // printf("
");
// } int T; scanf("%d", &T); while(T--){ scanf("%d", &master_idx); sender.push_back(master_idx); } bfs_for_map(); return 0; }