这题吧..真的一点思路都没有,不知道从何下手..
看了题解,只是简单的一步步满足下去,似乎并没有什么思维量,原因也只是因为一定有解,这就让人很痛苦了…
假定两个端点,一个端点不行,就换成他连接的某点做端点.
第一次用deque
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
#define debug(x) std::cerr << #x << " = " << (x) << std::endl
typedef long long LL;
const int MAXN = 1e5+17;
vector<int > G[MAXN];
bool in[MAXN];
int main(int argc ,char const *argv[])
{
#ifdef noob
freopen("Input.txt","r",stdin);freopen("Output.txt","w",stdout);
#endif
int n,m;
cin>>n>>m;
int st=-1,ed=-1;
for (int i = 0; i < m; ++i)
{
int u,v;
cin>>u>>v;
G[u].push_back(v);
G[v].push_back(u);
if(st==ed)
st=u,ed=v;
}
deque<int > que;
que.push_front(st);
que.push_back(ed);
in[st]=in[ed]=true;
while(1)
{
int hd = que.front();
bool hk=true,tk=true;
for(auto i : G[hd]) hk &= in[i];
for(auto i : G[hd])
{
if(hk) break;
if(!in[i])
{
in[i]=true;
que.push_front(i);
break;
}
}
int tl = que.back();
for(auto i : G[tl]) tk &= in[i];
for(auto i : G[tl])
{
if(tk) break;
if(!in[i])
{
in[i]=true;
que.push_back(i);
break;
}
}
if(hk&&tk) break;
}
cout<<que.size()<<endl;
for(auto i:que)
cout<<i<<" ";
cout<<endl;
return 0;
}