• 集训·旅行(增强版?)


    #include<bits/stdc++.h>
    using namespace std;
    const int N=500005;
    int n,m,u,v,fa[N],tmp=0x3f3f3f3f;
    bool can,ring[N],vis[N],huis;
    vector<int> mp[N];
    inline void dfsshu(int x)
    {
    	vis[x]=true;cout<<x<<" ";
    	for(int i=0;i<mp[x].size();i++)
    	{
    		int nex=mp[x][i];
    		if(!vis[nex])dfsshu(nex);
    	}
    }
    inline void get_ring(int now,int pre)
    {
    	if(can)return;
    	if(!fa[now])fa[now]=pre;
    	else if(fa[now]!=pre)
    	{
    		while(pre!=now)
    		{ring[pre]=true;pre=fa[pre];}
    		ring[now]=can=true;
    		return;
    	}
    	for(int i=0;i<mp[now].size();i++)
    	{
    		int nex=mp[now][i];
    		if(nex!=pre)get_ring(nex,now);
    	}
    }
    inline void dfshuan(int x)
    {
    	vis[x]=true;cout<<x<<" ";
    	if(ring[x])
    	{
    		bool flag=false;
    		for(int i=0;i<mp[x].size();i++)
    		{
    			if(huis)break;
    			int nex=mp[x][i];
    			if(vis[nex])continue;
    			if(ring[nex])
    			{
    				i++;while(i<mp[x].size()&&vis[mp[x][i]])i++;
    				if(i<mp[x].size())tmp=mp[x][i];
    				else if(nex>tmp)flag=huis=true;
    				break;
    			}
    		}
    		for(int i=0;i<mp[x].size();i++)
    		{
    			int nex=mp[x][i];
    			if(ring[nex]&&flag)continue;
    			if(!vis[nex])dfshuan(nex);
    		}
    	}
    	else
    	{
    		for(int i=0;i<mp[x].size();i++)
    		{
    			int nex=mp[x][i];
    			if(!vis[nex])dfshuan(nex);
    		}
    	}
    }
    signed main()
    {
    	ios::sync_with_stdio(false);
    	cin>>n>>m;
    	for(int i=1;i<=m;i++)
    	{
    		cin>>u>>v;
    		mp[u].push_back(v);
    		mp[v].push_back(u);
    	}
    	for(int i=1;i<=n;i++)
    	sort(mp[i].begin(),mp[i].end());
    	if(m==n-1)dfsshu(1);
    	else {get_ring(1,1);dfshuan(1);}
    	cout<<endl;
    }
    
  • 相关阅读:
    校园网络(tarjan)
    消息扩散(强连通分量)
    上帝造题的七分钟(树桩数组乱搞)
    数颜色 / 维护队列(带修莫队)
    Luogu5155 [USACO18DEC]Balance Beam
    分数规划小结
    Luogu3177 [HAOI2015]树上染色
    Luogu4402 机械排序
    Luogu3201 [HNOI2009]梦幻布丁
    Luogu3380 二逼平衡树
  • 原文地址:https://www.cnblogs.com/Ace-MYX/p/11678669.html
Copyright © 2020-2023  润新知