单纯的T掉了第十九个点,甚至连23、24、25都过了,想知道怎么改
#include<bits/stdc++.h>
using namespace std;
int v[10002][3],tail[5001],frm[5001],num,tmp[5001],ans[5001]={-1},t;
bool vst[10002];
int _r(void);
void _w(int);
void dfs(int);
void _dfs(int);
bool pd(int*,int*);
void change(int*,int*);
int main()
{
freopen("in.txt","r",stdin);
memset(tail,-1,sizeof(tail));
memset(frm,-1,sizeof(tail));
int n=_r(),m=_r(),x,y;
for(int i=1;i<=m;++i)
{
x=_r();
y=_r();
v[i*2-1][0]=v[i*2][1]=x;
v[i*2-1][1]=v[i*2][0]=y;
v[i*2-1][2]=tail[x];
v[i*2][2]=tail[y];
tail[x]=i*2-1;
tail[y]=i*2;
}
frm[1]=1;
if(m==n-1)
{
dfs(1);
for(int i=1;i<t;++i)
cout<<tmp[i]<<' ';
cout<<tmp[t]<<endl;
return 0;
}
_dfs(1);
int i=num;
do
{
int j=tail[i];
while(v[j][1]!=frm[i])
j=v[j][2];
memset(vst,0,sizeof(vst));
t=0;
vst[j]=1;
vst[j+((j&1)?1:-1)]=1;
dfs(1);
if(pd(tmp,ans)||ans[0]==-1)
change(tmp,ans);
i=frm[i];
}while(i!=num);
for(int i=1;i<t;++i)
cout<<ans[i]<<' ';
cout<<ans[t]<<endl;
}
int _r(void)
{
int n=0;
char c=getchar();
while(c<'0'||c>'9')
c=getchar();
while(c>='0'&&c<='9')
{
n=n*10+c-'0';
c=getchar();
}
return n;
}
void _w(int n)
{
if(n>9)
_w(n/10);
putchar(n%10+'0');
}
void dfs(int n)
{
bool f=1;
tmp[++t]=n;
while(f)
{
f=0;
int mn=-1;
for(int i=tail[n];i!=-1;i=v[i][2])
if(vst[i]==0&&(mn==-1||v[i][1]<v[mn][1]))
{
f=1;
mn=i;
}
if(f)
{
vst[mn]=1;
vst[mn+((mn&1)?1:-1)]=1;
dfs(v[mn][1]);
}
}
}
void _dfs(int x)
{
for(int i=tail[x];i!=-1;i=v[i][2])
if(frm[v[i][1]]==-1)
{
frm[v[i][1]]=x;
_dfs(v[i][1]);
}
else
if(v[i][1]!=frm[x])
{
frm[v[i][1]]=x;
num=x;
}
}
bool pd(int*a,int*b)
{
for(int i=0;i<=5000;++i)
if(a[i]!=b[i])
return a[i]<b[i];
return 0;
}
void change(int*a,int*b)
{
int tmp;
a[0]=b[0]=0;
for(int i=1;i<=5000;++i)
{
tmp=a[i];
a[i]=b[i];
b[i]=tmp;
}
}