1 条题解

  • 0
    @ 2025-10-8 16:59:11
    #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

    *【欧拉路径(难度:7)】有向图和无向图的欧拉回路

    信息

    ID
    1862
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    (无)
    递交数
    12
    已通过
    3
    上传者