【1076 30 bfs】 Forwards on Weibo

传送门

题意

给定\(N\)个微博用户,和最大转发层数\(L\),给定每个用户关注的用户,\(q\)个询问,给出\(x\)\(x\)法发新的微博后最多有多少用户转发,每个用户只能转发一次

数据范围

\(n\leq 1000\)
\(l\leq 6\)

题解

  • 对于每个询问做一次bfs,每个用户只能转发一次,标记有没有访问过
  • 每次扩的时候只将没超过最大层数的加入队列

Code

#include<bits/stdc++.h>
using namespace std;
const int N=1010;
vector<int>edge[N];
int st[N],lv[N];
int n,l;
int bfs(int x){
	int cnt=0;
	memset(lv,0,sizeof lv);
	memset(st,0,sizeof st);
	queue<int>q; q.push(x);
	st[x]=1;
	while(q.size()){
		auto it=q.front(); q.pop();
		for(int i=0;i<edge[it].size() && lv[it]<l;i++){
			int to=edge[it][i];
			if(!st[to]){
				cnt++;
				lv[to]=lv[it]+1;
				st[to]=1;
				q.push(to);
			}
		}
	}
	return cnt;
}
int main(){
	ios::sync_with_stdio(0); cin.tie(0);
	cin>>n>>l;
	for(int u=1;u<=n;u++){
		int m; cin>>m;
		while(m--){
			int v; cin>>v;
			edge[v].push_back(u);
		}
	}
	int q; cin>>q;
	while(q--){
		int x; cin>>x;
		cout<<bfs(x)<<endl;
	}
}
posted @ 2021-03-03 22:38  Hyx'  阅读(54)  评论(0)    收藏  举报