点击打开链接
题意:n<=1e5的图 找到path满足 每个点只经过一次 && 和endpoint(起/终)点相邻的点都包含在路径中
任意两个相邻点作为endpoint,并放入双端队列中,遍历u的相邻点,若存在v没被访问,则令v为起点 继续模拟 因为一定有解,复杂度为O(M)
#include
using namespace std;
const int N=2e5+20;
int n,m;
vector e[N];
int q[N],f,r; //deque,保存起点和终点
int vis[N];
int check(int u)
{
for(int i=0;i>n>>m)
{
bool flag=true;//first
for(int i=1;i<=n;i++)
e[i].clear(),vis[i]=0;
int u,v;
f=1e5;//
r=1e5+1;
while(m--)
{
scanf("%d%d",&u,&v);
e[u].push_back(v);
e[v].push_back(u);
if(flag)
{
flag=false;
vis[u]=vis[v]=1;
q[f]=u;
q[r]=v;
}
}
while(true)
{
int u=check(q[f]);
if(u==-1)
break;
else
{
q[--f]=u;
vis[u]=1;
}
}
while(true)
{
int u=check(q[r]);
if(u==-1)
break;
else
{
q[++r]=u;
vis[u]=1;
}
}
cout<