2 条题解
-
1张浩翔 LV 10 @ 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; } }
-
02023-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
- 上传者