70分求助
查看原帖
70分求助
62685
青春太美cjl楼主2021/2/1 19:29
#include<iostream>
#include<vector>

using namespace std;
int n,m,a,b;
long long mod=80112002;
vector<int> x[5005],y[5005];
int ans=0,cur[5005];//暂存每个点往后的链数
void dfs(int c){
	if(y[c].empty()){
		ans++;ans%=mod;
		cur[c]=1;
		return;	
	}
	for(int i=0;i<y[c].size();i++){
		if(cur[y[c][i]]){
			ans+=cur[y[c][i]];
			ans%=mod;
		}
		else {
			ans%=mod;
			int ansc=ans;
			dfs(y[c][i]);
			cur[y[c][i]]=(ans-ansc)%mod;
			ans%=mod;
		}
	} 
}

int main()
{
	cin>>n>>m;
		for(int i=0;i<m;i++){
			cin>>a>>b;
			x[b].push_back(a);//  b 吃 的 
			y[a].push_back(b);//  被吃的 
		}
		for(int i=1;i<=n;i++){
			if(x[i].empty()){
				dfs(i);
			}
		}
		cout<<ans<<endl;
	return 0;
}

2021/2/1 19:29
加载中...