1 条题解
-
0
#include<bits/stdc++.h> using namespace std; struct edge{int x,y,next;}a[410000];int alen,last[110000]; void ins(int x,int y){++alen;a[alen]=edge{x,y,last[x]};last[x]=alen;} int b[410000],len,rd[110000],cd[110000];bool va[210000]; void oula(int x) { for (int k=last[x];k;k=last[x]) { last[x]=a[k].next; if(va[k>>1])continue;va[k>>1]=1; oula(a[k].y); b[++len]=(k&1?-(k>>1):(k>>1)); } } int main() { int op;scanf("%d", &op);int n, m;scanf("%d%d", &n, &m); alen=1;memset(last,0,sizeof(last));memset(rd,0,sizeof(rd));memset(cd,0,sizeof(cd)); for(int i=1;i<=m;i++) { int x, y;scanf("%d%d", &x, &y);rd[y]++;cd[x]++;if(op&1) ins(x,y),ins(y,x);else ins(x,y),alen++; } bool flag=1;for(int i=1;i<=n;i++)if((op==2&&(rd[i]!=cd[i]))||((rd[i]+cd[i])&1)){flag=0;break;} if(!flag){printf("NO\n");return 0;} memset(va,0,sizeof(va));len=0;oula(a[2].x); if(len!=m){printf("NO\n");return 0;} printf("YES\n"); for(int i=len;i>=1;i--)printf("%d ", b[i]); printf("\n"); }
- 1
信息
- ID
- 1862
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 12
- 已通过
- 3
- 上传者