记忆化搜索,求调orz
查看原帖
记忆化搜索,求调orz
817450
Calarence4楼主2023/10/18 20:14
#include<bits/stdc++.h>
using namespace std;

int n,m;
const int MaxN=2e6;
vector<int> G[MaxN];
int out[MaxN],in[MaxN];
int mem[MaxN];
const int mode=80112002;

int dfs(int);
int main(){
	memset(mem,-1,sizeof(mem));
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int x,y;
		cin>>x>>y;
		G[x].push_back(y);//建立有向边
		out[x]++;
		in[y]++;
	}
	for(int i=0;i<(int)G[i].size();i++)
	{
		sort(G[i].begin(),G[i].end());
	}
	int ans=0;
	for(int i=1;i<=m;i++){
		if(in[i]==0){
			ans=max(ans,dfs(i));
		}
	}
	ans%=mode;
	cout<<ans<<"\n";
}
int dfs(int x){//dfs(x)的含义为x点作为起点的最大食物链的数量
	if(mem[x]!=-1){
		return mem[x];
	}
	if(out[x]==0){
		mem[x]=1;
		return 1;
	}
	for(int i=0;i<(int)G[x].size();i++){
		mem[x]=max(mem[x],dfs(G[x][i])+1)%mode;
	}
	return mem[x];
}
2023/10/18 20:14
加载中...