2 条题解

  • 0
    @ 2023-10-20 21:09:56
    #include <bits/stdc++.h>
    using namespace std;
    int maxx,minx=500;
    int g[501][501];
    int degree[501];
    int n,u,v;
    stack<int> ans;
    int getStart(){
    	int tot=0;
    	int res=0;
    	for(int i=1;i<=maxx;i++){
    		if(degree[i]%2==1){
    			tot++;
    			if(!res)res=i;
    		}
    	}
    	return tot==0||tot==2?res:-1;
    }
    void dfs(int pStart){
    	for(int i=1;i<=maxx;i++){
    		if(g[pStart][i]>0){
    			g[pStart][i]--,g[i][pStart]--;
    			dfs(i);
    		}
    	}
    	ans.push(pStart);
    }
    int main(){
    	cin>>n;
    	while(n--){
    		cin>>u>>v;
    		maxx=max(maxx,max(u,v));
    		minx=min(minx,min(u,v));
    		g[u][v]++,g[v][u]++;
    		degree[u]++,degree[v]++;
    	} 
    	int pStart=getStart();
    	if(!pStart)pStart=minx;
    	dfs(pStart);
    	while(!ans.empty()){
    		cout<<ans.top()<<endl;
    		ans.pop();
    	}
    	return 0;
    }
    

    信息

    ID
    596
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    159
    已通过
    21
    上传者