20分求助
查看原帖
20分求助
865306
chentaoer2010楼主2024/4/11 12:31

求调


#include<bits/stdc++.h>
#define mod 80112002
#define sz 500015
using namespace std;
int n,m,s,e,dp[5050],ans;
struct node
{
	int up;
	vector<int>next;
}a[5050];
void topo(int p)
{
	queue<int>q;
	q.push(p);
	dp[p]=1;
	while(!q.empty())
	{
		e=q.front();
		for(int i=0;i<a[e].next.size();i++)
		{
			dp[a[e].next[i]]+=(dp[e]%mod);
			--a[a[e].next[i]].up;
			if(!a[a[e].next[i]].up) q.push(a[e].next[i]%mod);
		}
		q.pop();
	}
	return ;
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		int u,v;
		scanf("%d%d",&u,&v);
		a[v].next.push_back(u);
		a[u].up++;
	}
	for(int i=1;i<=n;i++)
	{
		if(!a[i].up)
		{
			s=i;
			break;
		}
	}
	topo(s);
	for(int i=1;i<=n;i++)
	{
		if(!a[i].next.size()) ans=(ans%mod+dp[i]%mod)%mod;
	}
	printf("%d",ans%mod);
	return 0;
}
2024/4/11 12:31
加载中...