1 条题解
-
1
#include <bits/stdc++.h> using namespace std; const int N = 100010,M = 400010; int t,n,m; int h[N],to[M],ne[M],idx;//链式前向星 bool used[M]; int ans[M/2],cnt; int din[N],dout[N];//入度出度 //连边 inline void add(int u,int v) { to[idx] = v;ne[idx] = h[u];h[u] = idx++; } void dfs(int u) { for(int &i = h[u];~i;) { if(used[i]) { i = ne[i]; continue; } used[i] = true; if(t == 1) used[i^1] = true; int res; if(t == 1) { res = i/2+1; if(i&1) res = -res; } else res = i+1; int j = to[i]; i = ne[i]; dfs(j); ans[++cnt] = res; } } int main() { cin >> t >> n >> m; memset(h,-1,sizeof(h)); for(int i=0;i<m;i++) { int a,b; cin >> a >> b; add(a,b); if(t == 1) add(b,a); din[b]++;dout[a]++; } if(t == 1) { for(int i=1;i<=n;i++) { if(din[i]+dout[i]&1) { cout << "NO"; return 0; } } } else { for(int i=1;i<=n;i++) { if(din[i]!=dout[i]) { cout << "NO"; return 0; } } } for(int i=1;i<=n;i++) { if(h[i]!=-1) { dfs(i); break; } } if(cnt<m) { cout << "NO"; return 0; } cout << "YES" << endl; if(t==2) for(int i=cnt;i;i--) cout << ans[i] << " "; else for(int i=1;i<=cnt;i++) cout << -ans[i] << " "; return 0; }
- 1
信息
- ID
- 584
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 4
- 已通过
- 3
- 上传者