DFS有2个用例一直过不了,BFS又很神奇的死活都不对。。。跪了。。照着别人的改的
#include <iostream>
#include <stdlib.h>
#include <list>
#include <queue>
#include <stdio.h>
using namespace std;
struct Node
{
int level;
list<int> followers;
};
Node *users;
int n, level;
//BFS
int post(int root)
{
int sum = 0;
queue<int> visit;
list<int>::const_iterator itr;
bool *visited = new bool[n];
for(int i = 0; i < n; i++)
visited[i] = false;
visit.push(root);
visited[root] = true;
while(!visit.empty())
{
int node = visit.front();
visit.pop();
if(users[node].level > level)
break;
sum++;
for(itr = users[node].followers.begin(); itr != users[node].followers.end(); ++itr)
{
int follow = (*itr);
if(!visited[follow])
{
users[follow].level = users[node].level+1;
visited[follow] = true;
visit.push(follow);
}
}
}
return sum-1;
}
int main()
{
int nums;
int user;
int root;
int m;
cin >> n >> level;
users = new Node[n];
for(int i = 0; i < n; i++)
{
cin >> nums;
for(int j = 0; j < nums; j++)
{
cin >> user;
users[user-1].followers.push_back(i);
}
}
cin >> m;
for(int i = 0; i < m; i++)
{
cin >> root;
for(int j = 0; j < n; j++)
users[j].level = 0;
cout << post(root-1) << endl;
}
return 0;
}