TLE10分求调!!!


image
窝的代码

#include<bits/stdc++.h>
using namespace std;
int n,m;
vector<int>a[100005];
int bfs(int s){
	int mx=s;
	queue<int>q;
	bool vis[100005];
	memset(vis,0,sizeof vis);
	q.push(s);
	vis[s]=1;
	while(q.size()){
		int nn = q.front();
		q.pop();
		for(int i = 0;i<a[nn].size();i++){
			if(vis[a[nn][i]]==0){
				if(a[nn][i]>mx)mx=a[nn][i];
				q.push(a[nn][i]);
				vis[a[nn][i]]=1;
			}
		}
	}
	return mx;
}
int main(){
	cin>>n>>m;
	for(int i = 1;i<=m;i++){
		int x,y;
		cin>>x>>y;
		a[x].push_back(y);
	}
	for(int i = 1;i<=n;i++){
		cout<<bfs(i)<<" ";
	}
	return 0;
}
1 个赞

反向建图
搜索前看一下是否遍历过
用一个数组储存答案
核心代码:

代码
	for(int i=1;i<=m;i++){
		int u,v;
		cin>>u>>v; 
		ve[v].push_back(u);
	}
	for(int i=n;i>=1;i--){
		if(vis[i]==false){
			bfs(i);
		}
	}
	for(int i=1;i<=n;i++){
		cout<<ans[i]<<' ';
	}
1 个赞