96ptsWA 玄关求条
查看原帖
96ptsWA 玄关求条
1255837
Liyanxi1028楼主2025/7/1 19:51

rt,找不出来

#include<bits/stdc++.h>
#define int long long
#define db long double
#define Pii pair<int,int>
#define fi first
#define se second
#define inline
#define swap(x,y) x^=y^=x^=y
#define f(x,y) fixed<<setprecision(y)<<x
#define gc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,rp,stdin),p1==p2)?EOF:*p1++)

using namespace std;
const int N=1e6+10;
const int rp=1e6+10;

int n,m,fl=1,hs[N],b[N],f[N],dep[N],lp[N];
vector<int> vt[N]; 
char buf[rp],*p1=buf,*p2=buf;

inline int read() 
{
	int x=0,f=1; char c=0;
    while(!isdigit(c)){if(c=='-') f=-1; c=gc();}
    while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=gc();
    return x*f;
}

inline char read_ch()
{
	char c=0;
	while((!isalpha(c))||(c>='0'&&c<='9')) c=gc();
	return c;
}

inline void dfs(int x)
{
	dep[x]=dep[f[x]]+1;
	for(auto a:vt[x])
	{
		if(a==f[x]) continue;
		if(!dep[a]) f[a]=x,dfs(a);
		else if(dep[a]<dep[x])
		{
			for(int i=x;;i=f[i])
			{
				lp[i]=1;
				if(i==a) return;
			}
		}
	}
}

inline void write(int x)
{
	if(fl&&lp[x]&&x>=hs[x]) {fl=0; return;}
	b[x]=1; cout<<x<<" ";
	for(int i=0;i<vt[x].size();++i)
		if(!b[vt[x][i]])
		{
			int a=vt[x][i]; hs[a]=hs[x];
			for(int j=i+1;j<vt[x].size();++j)
				if(!b[vt[x][j]]) {hs[a]=vt[x][j]; break;}
		}
	for(auto a:vt[x])
		if(!b[a]) write(a);
}

signed main()
{
	cin.tie(0)->sync_with_stdio(0);
	cin>>n>>m; int u,v;
	for(int i=1;i<=m;++i)
	{
		cin>>u>>v;
		vt[u].push_back(v);
		vt[v].push_back(u);
	}
	for(int i=1;i<=n;++i) sort(vt[i].begin(),vt[i].end());
	if(m==n-1) write(1);
	else dfs(1),hs[1]=1e9,write(1);
	return 0;
}
2025/7/1 19:51
加载中...