40 pts,求助!
查看原帖
40 pts,求助!
814343
bc2_cryeggy楼主2023/8/1 11:10
#include <iostream>
#include <algorithm>
#include <cmath>

using namespace std;

#define int long long

const int kMaxN = 5e5 + 10, kMaxM = 5e5 + 50, kMaxK = 5e5 + 20;

int n, m, head[kMaxM], idx = 0, in[kMaxN], out[kMaxN], f[kMaxN], ans = 0;

struct node {
  int u, v, next;
}e[kMaxK];

void add(int u, int v) {
  e[++ idx].u = u;
  e[idx].v = v;
  e[idx].next = head[u];
  head[u] = idx;
}

int dfs(int S)
{
  if (f[S]) {
    return f[S];
  }
	int sum = 0;
  if (!out[S] && in[S]) {
    ++ sum;
  }
  for (int i = head[S]; i; i = e[i].next) {
    sum += dfs(e[i].v);
  }
  return f[S] = sum;
}

signed main() {
	cin >> n >> m;
	for (int i = 1, x, y; i <= m; ++ i) {
		cin >> x >> y;
    add(x, y);
		++ in[y];
    ++ out[x];
	}
	for (int i = 1; i <= n; ++ i) {
    if (!in[i]) {
      ans = (ans + dfs(i)) % 80112002;
    }
  }
  cout << ans % 80112002 << '\n';
  return 0;
}
2023/8/1 11:10
加载中...