【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;
}
}

浙公网安备 33010602011771号