20pts 求助
查看原帖
20pts 求助
814343
bc2_cryeggy楼主2023/7/23 18:02
#include <iostream>
#include <algorithm>
#include <cmath>

using namespace std;

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;
}

int 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) % 80012002;
    }
  }
  cout << ans % 80012002 << '\n';
  return 0;
}
2023/7/23 18:02
加载中...