n方算法求助
查看原帖
n方算法求助
95072
wudiss8楼主2020/10/6 21:29

RT,本蒟蒻使用 O(n2)O(n^2) 的算法,不吸氧最后3个点会LTE,吸了才能AC,有没有大佬能帮忙优化成不吸氧的qwq

#include<bits/stdc++.h>
using namespace std;
int ans[110001],atot,lst[110001];
int poi[110001],to[110001],next[110001],tot,u[110001],v[110001];
int delu,delv;
bool vis[110001];
inline void addt(int x,int y){
	tot++;
	next[tot]=poi[x];poi[x]=tot;to[tot]=y;
}
inline void dfs(int x,int fat){
	atot++;
	ans[atot]=x;
	int fn[5001],ftot=0;
	for(register int e=poi[x];e;e=next[e]){
		if(to[e]==fat)continue;
		ftot++;
		fn[ftot]=to[e];
	}
	sort(fn+1,fn+1+ftot);
	for(register int i=1;i<=ftot;i++)
	dfs(fn[i],x);
}
inline bool dfs2(int x,int fat){
	vis[x]=1;
	atot++;
	ans[atot]=x;
	int fn[5001],ftot=0;
	for(register int e=poi[x];e;e=next[e]){
		if((to[e]==fat) or (x==delu and to[e]==delv) or (x==delv and to[e]==delu))continue;
		if(vis[to[e]])return 0;
		vis[to[e]]=1;
		ftot++;
		fn[ftot]=to[e];
	}
	sort(fn+1,fn+1+ftot);
	for(register int i=1;i<=ftot;i++){
	    if(!dfs2(fn[i],x))return 0;
    }
   return 1;
}
inline int read(){
	char c=getchar();
	int s=0,f=1;
	while(c<'0' or c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0' and c<='9'){
		s=(s<<1)+(s<<3)+c-'0';
		c=getchar();
	}
	return s*f;
}
int main(){
	int n,m;
	n=read();m=read();
	for(register int i=1;i<=m;i++){
	    u[i]=read();v[i]=read();
	    addt(u[i],v[i]);
	    addt(v[i],u[i]);
    }
    if(m==n-1){
        dfs(1,0);
        for(register int i=1;i<=n;i++)
        printf("%d ",ans[i]);
    }else{
    	for(register int i=1;i<=n;i++)
    	lst[i]=n-i+1;
    	for(register int i=1;i<=m;i++){
    		atot=0;
    		memset(vis,0,sizeof(vis));
    		delu=u[i];delv=v[i];
    		dfs2(1,0);
    		if(atot==n){
    			bool flag=0;
    			for(register int i=1;i<=n;i++){
    			    if(ans[i]>lst[i])break;
    			    if(ans[i]<lst[i]){
				        flag=1;
				        break;
				    }
			    }
				if(flag){
					for(register int i=1;i<=n;i++)
					lst[i]=ans[i];
				}
			}
		}
		for(register int i=1;i<=n;i++)
		printf("%d ",lst[i]);
	}
	return 0;
}
2020/10/6 21:29
加载中...