比赛 EYOI与SBOI开学欢乐赛9th 评测结果 AAAAAAAAAA
题目名称 食物链 最终得分 100
用户昵称 yrtiop 运行时间 0.376 s
代码语言 C++ 内存使用 6.56 MiB
提交时间 2022-09-30 19:16:16
显示代码纯文本
#include <bits/stdc++.h>
#define pb emplace_back
typedef long long ll;

const int maxn = 1e5 + 5;
std::vector<int> G[maxn];
std::queue<int> q;
int n,m,deg[maxn];
ll f[maxn];

int main() {
	freopen("chain_2016.in","r",stdin);
	freopen("chain_2016.out","w",stdout);
	scanf("%d %d",&n,&m);
	for(int i = 1;i <= m;++ i) {
		int u,v;
		scanf("%d %d",&u,&v);
		G[u].pb(v);
		++ deg[v];
	}
	
	for(int i = 1;i <= n;++ i) {
		if(!deg[i]&&G[i].size()) {
			f[i] = 1;
			q.push(i);
		}
	}
	
	ll ans = 0;
	while(!q.empty()) {
		int u = q.front();
		q.pop();
		if(!G[u].size()) {
			ans += f[u];
		}
		for(auto& v : G[u]) {
			f[v] += f[u];
			if(!(-- deg[v])) {
				q.push(v);
			}
		}
	}
	
	printf("%lld",ans);
	return 0;
}