【题意】
根据微博的粉丝网络,计算一条微博最多被转发的次数
【思路】
BFS可搞定,DFS应该也可以
【注意点】
BFS时进队列就要把visited标记一下,否则可能重复计数,当然这个问题在测试数据中就已经体现了
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int main(int argc, char const *argv[])
{
int n,l,k;
vector<vector<int>> users;
cin >> n >> l;
users.resize(n);
for(int i=0; i<n; i++){
int m;
cin >> m;
for(int j=0; j<m; j++){
int uid;
cin >> uid;
users[--uid].push_back(i);
}
}
//BFS
cin >> k;
for(int i=0; i<k; i++){
int uid;
cin >> uid;
uid--;
vector<bool> visited(n,0);
queue<pair<int,int>> qq;
qq.push(pair<int,int>(uid,0));
visited[uid] = 1;
int cnt = -1;
while(!qq.empty()){
int id = qq.front().first;
int level = qq.front().second;
cnt++;
if(level!=l){
for(int j=0; j<users[id].size(); j++){
if(!visited[users[id][j]]){
qq.push(pair<int,int>(users[id][j],level+1));
visited[users[id][j]] = 1;
}
}
}
qq.pop();
}
cout << cnt << endl;
}
system("pause");
return 0;
}