- 分享
day2比赛
- @ 2025-7-16 17:13:42
T5
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
int n;
vector<int> adj[2010];
bool vis[2010];
void dfs(int u) // u即表示当前节点
{
if (vis[u]) return; // 当前节点已经走过
vis[u] = 1; // 之前没走过,现在走了,标记一下
for (int i = 0; i < adj[u].size(); i++) // 遍历当前点u能够到达的所有节点j,并以j为新的起点继续出发
{
int j = adj[u][i];
dfs(j);
}
}
int main()
{
int n, m, ans = 0;
cin >> n >> m;
for (int i = 1; i <= m; i++)
{
int a, b;
cin >> a >> b; // a --> b
adj[a].push_back(b);
}
// 循环遍历所有的点作为起点,把能走到的点都标记
for (int i = 1; i <= n; i++)
{
memset(vis, 0, sizeof vis);
dfs(i); // 以i为起点进行路径标记
for (int j = 1; j <= n; j++)
if (vis[j]) ans++;
}
cout << ans;
return 0;
}
0 条评论
目前还没有评论...