87TLE求助
查看原帖
87TLE求助
602932
NumberTrart楼主2024/5/16 21:40
#include <algorithm>//STL 通用算法
#include <cstdio>//定义输入/输出函数
#include <cstring>//字符串处理
#include <iostream>//数据流输入/输出
#include <vector>//STL 动态数组容器
using namespace std;
int m;
int g[505][505],nxt[505][505],lst[505][505];
int in[505];
int z=1;
int a[1036];
int maxx,minn=2e9;
bool dfs(int p,int dep)
{
	if(dep==m+1)
	{
		for(int i=1;i<=m;i++) cout<<a[i]<<'\n';
		cout<<p<<'\n';
		return true;
	}
	a[dep]=p;
	for(int i=nxt[p][0];i<=500;i=nxt[p][i])
		if(g[p][i])
		{
			g[p][i]--;
			g[i][p]--;
			if(!g[p][i])
			{
				lst[p][nxt[p][i]]=lst[p][i];
				nxt[p][lst[p][i]]=nxt[p][i];
			}
			if(dfs(i,dep+1)) return true;
			if(!g[p][i])
			{
				lst[p][nxt[p][i]]=i;
				nxt[p][lst[p][i]]=i;
			}
			g[i][p]++;
			g[p][i]++;
		}
	return false;
}
int main(){
	ios::sync_with_stdio(false);
	cin>>m;
	for(int i=1;i<=m;i++)
	{
		int u,v;
		cin>>u>>v;
		g[u][v]++;
		g[v][u]++;
		maxx=max(maxx,max(u,v));
		minn=min(minn,min(u,v));
		in[u]++;
		in[v]++;
	}
	for(int i=minn;i<=maxx;++i)
	{
		int head=0;
		for(int j=minn;j<=maxx;++j)
			if(g[i][j])
			{
				nxt[i][head]=j;
				lst[i][j]=head;
				head=j;
			}
		nxt[i][head]=501;
		lst[i][501]=head;
	}
	//for(int i=1;i<=500;i++) sort(g[i].begin(),g[i].end());
	for(int i=minn;i<=maxx;i++)
		if(in[i]&1){
			z=i;
			break;
		}
	dfs(z,1);
	return 0;
}

链表都用了还TLE……

2024/5/16 21:40
加载中...