90pts,MLE求调
查看原帖
90pts,MLE求调
431956
_k_e_v_i_n_楼主2023/8/15 14:21

vector:

#include <bits/stdc++.h>
using namespace std;
int k, n, m, a[105], vis[1005], ans;
vector <int> G[1005];
void dfs(int now, int x) {
	if (vis[now] == x - 1) {
		vis[now] = x;
	}
	for (int i = 0; i < G[now].size(); i++) {
		if (vis[G[now][i]] != x) {
			dfs(G[now][i], x);
		}
	}
	return ;
}
int main() {
	cin >> k >> n >> m;
	for (int i = 1; i <= k; i++)	cin >> a[i];
	for (int i = 1; i <= m; i++) {
		int u, v;
		cin >> u >> v;
		G[u].push_back(v);
	}
	for (int i = 1; i <= k; i++) {
		dfs(a[i], i);
	}
	for (int i = 1; i <= n; i++) {
		if (vis[i] == k) {
			ans++;
		}
	}
	cout << ans;
	return 0;
}

邻接矩阵:

#include <bits/stdc++.h>
using namespace std;
int k, n, m, a[105], vis[1005], ans, G[1005][1005];
void dfs(int now, int x) {
	if (vis[now] == x - 1) {
		vis[now] = x;
	}
	for (int i = 1; i <= n; i++) {
		if (G[now][i] && vis[i] != x) {
			dfs(i, x);
		}
	}
	return ;
}
int main() {
	cin >> k >> n >> m;
	for (int i = 1; i <= k; i++)	cin >> a[i];
	for (int i = 1; i <= m; i++) {
		int u, v;
		cin >> u >> v;
		G[u][v] = 1;
	}
	for (int i = 1; i <= k; i++) {
		dfs(a[i], i);
	}
	for (int i = 1; i <= n; i++) {
		if (vis[i] == k) {
			ans++;
		}
	}
	cout << ans;
	return 0;
}

2023/8/15 14:21
加载中...