求助
  • 板块学术版
  • 楼主江山_远方
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/5/18 21:51
  • 上次更新2023/11/4 23:05:41
查看原帖
求助
222849
江山_远方楼主2021/5/18 21:51

P5318
大体思路是通过邻接表储存点的关系,并且使用vector,之后便是按题意模拟。
代码3TLE2WA,但根据时间复杂度来算是不会超时的,bfs找不到与我类似的做法
代码:(球球您了,感激不尽

#include<bits/stdc++.h>
using namespace std;
int n,t,m,x,y;
int k[2100000],b[2100000],c[2100000];
vector<int> a[1100000];
int print(){for(int i=1;i<=n;i++)printf("%d ",k[i]);puts("");t=0,memset(b,0,sizeof(b)),memset(k,0,sizeof(k));}
void dfs(int K)
{
	if(t==n){print();return;}
	for(int i=1;i<=a[K].size();i++)
	if(!b[a[K].at(i-1)])k[++t]=a[K].at(i-1),b[a[K].at(i-1)]=1,dfs(a[K].at(i-1));
}
int bfs(int x)
{
	int h=0,t=1,cx;
	b[x]=1;
	k[1]=x;
	while(h<t)
	{
		h++;
		for(int i=1;i<=a[k[h]].size();i++)
		{
			cx=a[k[h]].at(i-1);
			if(b[cx])continue;
			k[++t]=cx;
			b[cx]=1;
		}
	}
	print();
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)scanf("%d%d",&x,&y),a[x].push_back(y); 
	for(int i=1;i<=n;i++)sort(a[i].begin(),a[i].end());
	t=k[1]=1;
	dfs(1);
	bfs(1);
	return 0;
} 
2021/5/18 21:51
加载中...