UVa 10054 : The Necklace 【欧拉回路】

UVa 10054 : The Necklace 【欧拉回路】

大家好,又见面了,我是全栈君。

题目链接

题目大意:我的妹妹有一串由各种颜色组成的项链。 项链中两个连续珠子的接头处共享同一个颜色。 如上图, 第一个珠子是green+red, 那么接这个珠子的必须以red开头,如图的red+white.
噢!天啊! 一天, 项链项链被扯断了,珠子掉落了一地。我的妹妹竭尽全力的把珠子一个个捡起来, 但是她不确定是否全部捡回来了。 现在,她叫我帮忙。 
她想知道是否可能把这些珠子全部连接起来, 连接的方法和项链原来的方法一样。
请帮我写一个程序解决这个问题。

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;

const int N=60;

int n;
int T,kase=0;
int p[N];
int Find(int x)
{
    if(p[x]==-1) return x;
    return x==p[x]? x:p[x]=Find(p[x]);
}
void Union(int x,int y)
{
    x=Find(x),y=Find(y);
    p[x]=y;
}

int num[N];
int G[N][N];

void Traverse(int u)
{
    for(int v=1;v<=50;v++)
        if(G[u][v]>0)
        {
            G[u][v]--,G[v][u]--;
            Traverse(v);
            printf("%d %d\n",v,u);    //不可以顺序打印 
        }
}

void solve()
{
    if(kase>0) puts("");
    printf("Case #%d\n",++kase);
    int pp=-1;
    for(int i=1;i<=50;i++)
    {
        if(num[i]==0) continue;
        if(num[i]&1)     //存在奇度数结点 
        {
            puts("some beads may be lost");
            return ;
        }
        if(pp==-1)
        {
            pp=Find(i);
            continue;
        }
        if(pp!=Find(i))    //不联通 
        {
            puts("some beads may be lost");
            return ;
        }
    }
    Traverse(pp);
}

void init()
{
    memset(p,-1,sizeof(p));
    memset(num,0,sizeof(num));
    memset(G,0,sizeof(G));
}

int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        init();
        for(int i=0;i<n;i++)
        {
            int u,v;
            scanf("%d%d",&u,&v);
            num[u]++,num[v]++;
            G[u][v]++,G[v][u]++;    //无向图 
            Union(u,v);
        }
        solve();
    }
}

 

转载于:https://www.cnblogs.com/Just–Do–It/p/7448932.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108202.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • G-Sync 与 FreeSync : 显示器的未来

    G-Sync 与 FreeSync : 显示器的未来如果你经常关注显示器,或是爱在电脑上玩游戏/看电影,那么你可能需要了解以下两个最新的技术:Nvidia的G-Sync以及AMD的FreeSync。

    2022年6月10日
    61
  • RX 和 TX_RX和OTC

    RX 和 TX_RX和OTC我们在ifconfig查看网卡配置时或者嵌入式开发的时候,经常会看到rx/tx缩写,其含义如下:RX==receive,接收,从开启到现在接收封包的情况,是下行流量。TX==Transmit,发

    2022年8月6日
    23
  • 建立友好城市有什么用_缔结友好城市

    建立友好城市有什么用_缔结友好城市原题连接Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免事故。编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航线不相交的情况下,被批准的申请尽量多。输入格式第1行,一个整数N,表示城市数。第2行到第n+1行,每行两个整数,中间用1个空格隔开,分别表示南岸和

    2022年8月8日
    4
  • vga转HDMI与hdmi转VGA区别

    vga转HDMI与hdmi转VGA区别

    2022年2月7日
    165
  • Latex公式换行与对齐

    Latex公式换行与对齐Latex公式换行与对齐1、应用amsmath包:\usepackage{amsmath}2、公式中用aligned:\begin{equation}\begin{aligned}……\end{aligned}\end{equation}或者直接用align:\begin{align}……\end{align}3、换行时用“\”换行符\begin{align}a=1+2+3+4+5\\=6+9\end{align}效果:4、左对齐用“&amp

    2022年6月12日
    59
  • 2060s

    2060s2060s老版本三星核心:175显存:2030功耗:125算力:43+镁光核心:-400显存:1050功耗:125算力:37+升级系统后三星核心:1035显存:2030镁光核心:1035显存:1050

    2022年6月22日
    67

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号