WA on #16 #18 #22
#include<bits/stdc++.h>
using namespace std;
int n,m,st,fa[500005],d1,d2,maxsub;
bool vis[500005],r[500005];
vector<int> s[500005];
deque<int> q;
void dfs(int x)
{
printf("%d ",x);
vis[x]=true;
for(int i=0;i<s[x].size();i++)
{
int to=s[x][i];
if(vis[to]==true)
continue;
if((x==d1&&to==d2)||(x==d2&&to==d1))
continue;
dfs(to);
}
}
void cutside(int x,int y)
{
while(q.front()!=x)
q.pop_front();
while(q.back()!=y)
q.pop_back();
int neww=q.front();
q.pop_front();
while(!q.empty())
{
int now=q.front();
q.pop_front();
maxsub=max(maxsub,now);
for(int i=0;i<s[now].size();i++)
{
int to=s[now][i];
if(to==q.front()||to==neww)
continue;
maxsub=max(maxsub,to);
}
if(q.front()>maxsub)
{
d1=now;
d2=q.front();
dfs(1);
exit(0);
}
}
}
bool flag;
void findround(int x,int f)
{
q.push_back(x);
if(fa[x]&&fa[x]!=f&&flag==false)
{
flag=true;
cutside(x,f);
}
fa[x]=f;
for(int i=0;i<s[x].size();i++)
{
int to=s[x][i];
if(to!=f)
findround(to,x);
if(flag==true)
return;
}
q.pop_back();
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
s[u].push_back(v);
s[v].push_back(u);
}
for(int i=1;i<=n;i++)
sort(s[i].begin(),s[i].end());
if(m==n)
findround(1,1);
memset(vis,0,sizeof(vis));
dfs(1);
return 0;
}
*蒟蒻求大佬帮忙,感恩不尽qwq