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 条评论

目前还没有评论...