邻接表&dfs 90ptsTLE, 加记忆化30pts求调
查看原帖
邻接表&dfs 90ptsTLE, 加记忆化30pts求调
670324
nafonsn楼主2023/8/18 21:47

注释掉的是加上的记忆化

#include<bits/stdc++.h>
using namespace std;
int cnt=0;
int head[100050];
/*int maxn[100050];*/
bool vis[100050];
struct edge
{
	int from,to,nxt;
}e[100050];
void addedge(int u,int v)
{
	e[++cnt].nxt=head[u];
	e[cnt].from=u;
	e[cnt].to=v;
	head[u]=cnt;
}
int dfs(int s)
{
	/*if(maxn[s]) return maxn[s];*/
	int ans=s;
	for(int i=head[s];i;i=e[i].nxt)
	{
		if(!vis[e[i].to])
		{
			vis[e[i].to]=1;
			ans=max(ans,dfs(e[i].to));
		}
	}
	return /*maxn[s]=*/ans;
}
int main()
{
	int x,y;
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		cin>>x>>y;
		addedge(x,y);
	}
	for(int i=1;i<=n;i++)
	{
		cout<<dfs(i)<<" ";
		memset(vis,0,sizeof(vis));
	}
}
2023/8/18 21:47
加载中...