UVA10054 The Necklace 题解

发布时间 2023-10-02 10:53:56作者: Miya555

好可恶一道题,怎么没人告诉我输出之间有空行

思路是先抽象成图,然后跑一边dfs记录边的前后顺序。

对于不能成环的情况,只需要再开个数组记录度数判断奇点即可。

若存在奇点则break掉,剩下的跑dfs、

//produced by miya555
//stupid mistakes:1.多测要清空 2.输出之间有空行
//ideas:dfs直接搜
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int t,n,d[N],g[N][N],flag;
void euler(int u){
    int v;
    for(v=1;v<=50;v++){
        if(g[u][v]){
            g[u][v]--;
            g[v][u]--;
            euler(v);
            cout<<v<<' '<<u<<endl;
        }
    }
}
int tmp;
int main(){
    //int u,v;
    cin>>t;
    for(int x=1;x<=t;x++){
        memset(d,0,sizeof(d));
        memset(g,0,sizeof(g));
        cout<<"Case #"<<x<<endl;
        flag=0;
        cin>>n;
        for(int i=1;i<=n;i++){
            int u,v;
            cin>>u>>v;
            d[u]++;
            d[v]++;
            g[u][v]++;
            g[v][u]++;
            tmp=u;
        }
        for(int i=1;i<=50;i++){
            if(d[i]%2==1){
                cout<<"some beads may be lost"<<endl;
                flag=1;
                break;
            }
        }
        if(!flag) euler(tmp);
        cout<<"\n";
    }
    
    return 0;
}