跑得太慢了,求优化
查看原帖
跑得太慢了,求优化
751417
diamond_153楼主2022/12/11 23:20
#include<iostream>
#include<vector>
#include<set>
#include<string>
#include<cstring>
using namespace std;
set<int> refers[101000];//记录每一个文献的后继
int n,m;
bool vis[101000]={0};
basic_string<int> dfs(int ind=1){
	vis[ind]=1;//标记
	basic_string<int> result{ind};//结果,basic_string支持拼接操作
	for(auto i:refers[ind])
		!vis[i]&&(result+=dfs(i),1);//继续搜索,遍历到的后继一定是存在的
	return result;
}
basic_string<int> bfs(int ind=1){
	memset(vis,0,sizeof(vis));
	basic_string<int> result{ind};
	vis[ind]=1;
	int now_ptr=0;
	while(now_ptr!=result.size()){
		for(auto i:refers[result[now_ptr]])
			!vis[i]&&(result.push_back(i),vis[i]=1);//保存&&标记
		now_ptr++;
	}
	return result;
}
int main(){
	ios::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=0;i<m;i++){
		int x,y;
		cin>>x>>y;
		refers[x].insert(y);
	}
	basic_string<int> dfs_result=dfs(),bfs_result=bfs();
	for(auto i:dfs_result)
		cout<<i<<" ";
	cout<<endl;
	for(auto i:bfs_result)
		cout<<i<<" ";
}

2.85s,求大佬优化

2022/12/11 23:20
加载中...