2 条题解

  • 1
    @ 2023-11-11 14:31:27
    #include<bits/stdc++.h>
    const int N = 10000000;
    using namespace std;
    int m[1000][1000],d[N],l[N],sum=1,n,x,y,cnt=0,max_int=0;
    void dfs(int i)
    {
    	int cnt1;
    	for(cnt1 = 1;cnt1 <= max_int;++cnt1)
    	{
    		if(m[i][cnt1] >= 1)
    		{
    			m[i][cnt1]--,m[cnt1][i]--;
    			dfs(cnt1);
    		}
    	}
    	l[++cnt]=i;
    }
    int main()
    {
    	cin >> n;
    	for (int i = 1;i <= n;++i){
    		cin >> x >> y;
    		m[x][y]++,m[y][x]++;
    		d[x]++,d[y]++;
    		max_int = max(max_int,max(x,y));
    	}
    	for(int i = 1;i <= max_int;++i)
    	{
    		if(d[i]%2)
    		{
    			sum=i;
    			break;
    		} 
    	}
    	dfs(sum);
    	for(int i = cnt ; i >= 1;i--){
    		cout << l[i] << endl;
    	}
    }
    
    • 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;
      }
      
      • 1

      信息

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