蒟蒻P8TLE求调(朴素dfs)
查看原帖
蒟蒻P8TLE求调(朴素dfs)
1158679
Ten_Suzume楼主2025/8/5 15:23
#include<bits/stdc++.h>
using namespace std;
int mp[505][505],ed[505][505],mpi[505][505],deg[505],ans[505],m,co=0;
void dfs(int now,int cnt){
	if(cnt==m) co=1;
	for(int i=1;i<=deg[now];i++){
		int u=ed[now][i];
		if((mpi[now][u]==mp[now][u])||(mpi[u][now]==mp[u][now])) continue;
		mpi[now][u]++,mpi[u][now]++;
		ans[cnt]=u;
		dfs(u,cnt+1);
		if(co) return;
		mpi[now][u]--,mpi[u][now]--;
	}
}
int main(){
	int x1,x2,q=1;
	cin>>m;
	for(int i=0;i<m;i++){
		cin>>x1>>x2;
		deg[x1]++;
		deg[x2]++;
		mp[x1][x2]++;
		mp[x2][x1]++;
	}
	for(int i=1;i<=500;i++){
		for(int j=1;j<=500;j++){
			if(!mp[i][j]) continue;
			for(int l=1;l<=mp[i][j];l++) ed[i][q++]=j;
		}
		q=1;
	}
	int st=0,k=0;
	for(int i=1;i<=500;i++){
		if(deg[i]&&!k) k=i; 
		if(deg[i]%2&&!st) st=i;
	}
	if(st){
		dfs(st,0);
		cout<<st;
	}else{
		dfs(k,0);
		cout<<k;	
	}
	for(int i=0;i<m;i++) cout<<endl<<ans[i];
	return 0;
}
2025/8/5 15:23
加载中...