1 条题解

  • 0
    @ 2025-10-8 16:57:46
    #include<bits/stdc++.h>
    using namespace std;
    const int N= 50050;
    vector<pair<int, int>> G[N];
    vector<int> p;
    bool vis[N];
     
    bool dfs(int x)
    {
        vis[x]=true;
        int du=0;
        for(auto i:G[x])if(!vis[i.first])
        {
            int y=i.first,id=i.second;
            if(dfs(y))
            {
                du++;
                p.push_back(id);
            }
        }
        return du%2==0;
    }
     
    int main()
    {
        int n,m;scanf("%d%d",&n,&m);
        for(int i=1,x,y;i<=m;i++)
        {
            scanf("%d%d",&x,&y);
            G[x].push_back({y,i});
            G[y].push_back({x,i});
        }
        memset(vis,0,sizeof(vis));
        for(int i=1;i<=n;i++)if(!vis[i])
            if(dfs(i))
            {
                printf("-1\n");
                return 0;
            }
        sort(p.begin(),p.end());
        printf("%d\n",p.size());
        for(int i=0;i<p.size();i++)printf("%d\n",p[i]);
        return 0;
    }
    
    • 1

    *【递归】所有点度数为奇[USACO11OPEN] Odd degrees G

    信息

    ID
    1552
    时间
    1000ms
    内存
    128MiB
    难度
    7
    标签
    递交数
    78
    已通过
    17
    上传者