题目:
在抖音上,共有N个用户,如果A关注B,如果B关注C,则A间接关注了C,如果N个用户都关注了用户h(可以是直接关注和间接关注),则用户h为网红,求一共有多少网红?
输入:
第一行输入用户的数量N,和关系数量M
第二行输入M个关注关系
例如:
4 3
1 2 3 4 1 4
代码:
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
void dfs(vector<vector<int>>& graph, int k, vector<int>& res)
{
stack<int> stk;
vector<bool> is_visited(graph.size(), false);
stk.push(k);
while (!stk.empty())
{
int node = stk.top();
if (is_visited[node])
{
stk.pop();
}
else
{
is_visited[node] = true;
for (int i = 0; i < graph[node].size(); i++)
{
int v = graph[node][i];
if (!is_visited[v])
stk.push(v);
}
}
}
for (int i = 1; i < graph.size(); i++)
{
if (is_visited[i])
res[k] = res[k] + 1;
}
}
int main() {
int vertex_num = 0;
int edges_num = 0;
cin >> vertex_num >> edges_num;
vector<vector<int>> graph(vertex_num + 1, vector<int>());
for (int i = 0; i < edges_num; i++)
{
int u, v;
cin >> u >> v;
graph[u].push_back(v);
}
vector<int> res(vertex_num + 1, 0);
for (int i = 1; i <= vertex_num; i++)
{
dfs(graph, i, res);
}
int count = 0;
for (int i = 1; i <= vertex_num; i++)
{
if (res[i] == vertex_num)
++count;
}
cout << count << endl;
}