40分求助大佬
查看原帖
40分求助大佬
352661
NoNs楼主2021/8/26 21:28
#include<bits/stdc++.h>
using namespace std;
vector<int> G[5001];
int in[5001];
int out[5001];
queue<int> qq;
long long ans[5001];

int main()
{
	int n,m;
	scanf("%d%d",&n,&m);
	int a,b;
	for(int i=0;i<m;i++)
	{
		scanf("%d%d",&a,&b);
	    G[a].push_back(b);
	    in[b]++;
	    out[a]++;
	} 
	for(int i=1;i<=n;i++)
	{
		if(in[i]==0)
		{
			ans[i]=1;
		    qq.push(i);	
		}
	}
	long long maxx=0;
	while(qq.size())
	{
		int t=qq.front();
		qq.pop();
		for(int i=0;i<G[t].size();i++)
		{
			ans[G[t][i]]+=ans[t];
			in[G[t][i]]--;
			if(in[G[t][i]]==0)
			{
				qq.push(G[t][i]);
				if(out[G[t][i]]==0)
				maxx+=ans[G[t][i]];	
			}
			
		}
	}
	printf("%lld",maxx%80112002);
}

跪谢大佬orz

2021/8/26 21:28
加载中...