#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <map>
#include <algorithm>
#include <set>
using namespace std;
#define MM(a) memset(a,0,sizeof(a))
typedef long long ll;
typedef unsigned long long ULL;
const int mod = 1000000007;
const double eps = 1e-10;
const int inf = 0x3f3f3f3f;
const int big=50000;
ll max(int a,int b) {return a>b?a:b;};
ll min(int a,int b) {return a<b?a:b;};
int G[505][505],deg[550],f[550];
int cas,n;
int find_(int i)
{
if(i!=f[i])
f[i]=find_(f[i]);
return f[i];
}
void unite(int i,int j)
{
int ri=find_(i);
int rj=find_(j);
if(ri!=rj)
f[ri]=rj;
}
void dfs(int u)
{
for(int v=1;v<=50;v++)
if(G[u][v]>0)
{
G[u][v]--;
G[v][u]--;
dfs(v);
printf("%d %d\n",v,u);
}
}
void solve()
{
for(int i=1;i<=50;i++)
if(deg[i]%2!=0)
{
printf("some beads may be lost\n");
return;
}
int root=0;
for(int i=1;i<=50;i++)
if(deg[i]&&f[i]==i)
root++;
if(root>1) {
printf("some beads may be lost\n");
return;
}
for(int u=1;u<=n;u++) if(deg[u]){dfs(u);return;}
}
int main()
{
scanf("%d",&cas);
for(int t=1;t<=cas;t++)
{
scanf("%d",&n);
int x,y;
for(int i=1;i<=50;i++) f[i]=i;
memset(G,0,sizeof(G));
memset(deg,0,sizeof(deg));
for(int i=1;i<=n;i++)
{
scanf("%d %d",&x,&y);
G[x][y]++;G[y][x]++;
deg[x]++;deg[y]++;
unite(x,y);
}
if(t!=1) printf("\n");
printf("Case #%d\n",t);
solve();
}
return 0;
}
UVA 10054
原创
©著作权归作者所有:来自51CTO博客作者smilesundream的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
UVA - 10054 The Necklace
题目大意:给出一系列数字,要求判断是否能形成欧拉回路
i++ #include 欧拉回路 -
uva 10054(欧拉回路+并查集)
题解:明显的欧拉回路,先用并查集
uva 图论 i++ #include 欧拉回路 -
uva 10054 The Necklace 拼项链 欧拉回路基础应用
(Orz)代码:#include #include.
i++ #include 深搜