求助
查看原帖
求助
263846
Liangjm楼主2021/4/11 11:10
#include<bits/stdc++.h>
using namespace std;

#define rep0(i,n) for(int i=0;i<n;i++)
#define rep1(i,n) for(int i=1;i<=n;i++)
#define REP(i,j,n) for(int i=j;i<=n;i++)
#define REPG(i,h,x) for(int i=h[x];~i;i=edge[i].next)
typedef unsigned long long ull;

const int M=5e5+5;
const int N=5e3+5;

int head[N],cnt,f[N],rudu[N],chudu[N];
struct qwq{
	int v,next;
}edge[M];

inline void add(int x,int y){
	edge[++cnt]=(qwq){y,head[x]},head[x]=cnt;
}

queue<int> q;
int n,m,ans;

const int MOD=80112002;

int main(){
	cin>>n>>m;
	memset(head,-1,sizeof(head));
	rep1(i,m){
		int x,y;
		cin>>x>>y;
		add(x,y);
		rudu[y]++;
		chudu[x]++;
	}
	
	rep1(i,n){
		if(rudu[i]==0)
			f[i]=1;
			q.push(i);
	}
	
	while(!q.empty()){
		int u=q.front();
		q.pop();
		REPG(i,head,u){
			int v=edge[i].v;
			f[v]+=f[u];
			f[v]%=MOD;
			rudu[v]--;
			if(rudu[v]==0){
				if(chudu[v]==0){
					ans+=f[v];
					ans%=MOD;
					continue;
				}
				q.push(v);
			}
		}
	}
	cout<<ans<<endl;
	
	return 0;
}

2021/4/11 11:10
加载中...