1 条题解

  • 0
    @ 2026-10-25 18:43:51

    思路

    必须用完每条无向边一次且输出字典序最小路,重边分别计数,从最小奇点或最小有边点开始。

    参考程序(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    int g[501][501],deg[501];vector<int>path;void dfs(int v){for(int u=1;u<=500;u++)while(g[v][u]){g[v][u]--;g[u][v]--;dfs(u);}path.push_back(v);}int main(){int f;cin>>f;while(f--){int a,b;cin>>a>>b;g[a][b]++;g[b][a]++;deg[a]++;deg[b]++;}int start=1;while(!deg[start])start++;for(int i=1;i<=500;i++)if(deg[i]%2){start=i;break;}dfs(start);reverse(path.begin(),path.end());for(int v:path)cout<<v<<'\n';}
    
    • 1

    信息

    ID
    1405
    时间
    1000ms
    内存
    64MiB
    难度
    普及
    标签
    递交数
    1
    已通过
    1
    上传者