30pts 求助
查看原帖
30pts 求助
483524
liuzihaohao楼主2024/8/25 15:34
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, m, ans = 0;
int a[10009], fa[10009];
queue<int> que;

void dfs(int now, int cnt) {
	bool flag = true;
	for (int i = 1; i <= n; i++) {
		if (fa[i] == now) {
			flag = false;
			dfs(i, cnt + a[now]);
		}
	}
	if (flag) {
		ans = max(ans, cnt + a[now]);
//       cout<<now<<" "<<cnt+a[now]<<endl;
	}
}

signed main(void) {
	scanf("%lld%lld", &n, &m);
	for (int i = 1; i <= n; i++) {
		scanf("%lld", &a[i]);
		fa[i] = 0;
	}
	for (int i = 1; i <= m; i++) {
		int tmp_b, tmp_a;
		scanf("%lld%lld", &tmp_a, &tmp_b);
		fa[tmp_a] = tmp_b;
	}
	for (int i = 1; i <= n; i++) {
		if (fa[i] == 0) {
			que.push(i);
		}
	}
	while (!que.empty()) {
		dfs(que.front(), 0);
		// cout<<que.front()<<endl;
		que.pop();
	}
	printf("%lld", ans);
	return 0;
}
2024/8/25 15:34
加载中...