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)
上一篇 2022年3月6日 下午3:00
下一篇 2022年3月6日 下午4:00


相关推荐

  • Java中finalize()方法的作用

    Java中finalize()方法的作用finalize 方法是 Object 提供的的实例方法 使用规则如下 当对象不再被任何对象引用时 GC 会调用该对象的 finalize 方法 finalize 是 Object 的方法 子类可以覆盖这个方法来做一些系统资源的释放或者数据的清理可以在 finalize 让这个对象再次被引用 避免被 GC 回收 但是最常用的目的还是做 cleanupJava 不保证这个 finalize 一定被执行 但是

    2026年3月17日
    2
  • xray漏洞扫描器

    xray漏洞扫描器文章目录一、xray下载二、xray安装、使用一、xray下载xray是一款功能强大的安全评估工具,由多名经验丰富的一线安全从业者呕心打造而成,主要特性有:1、检测速度快。发包速度快;漏洞检测算法高效。2、支持范围广。大至OWASPTop10通用漏洞检测,小至各种CMS框架POC,均可以支持。3、代码质量高。编写代码的人员素质高,通过CodeReview、单元测试、集成测试等多层验证来提高代码可靠性。4、高级可定制。通过配置文件暴露了引擎的各种参数,通过修改配置文件可

    2022年5月7日
    90
  • 频次最高的38道selenium面试题及答案(下)[通俗易懂]

    频次最高的38道selenium面试题及答案(下)[通俗易懂]20、selenium中隐藏元素定位,你该如何做?隐藏元素可以正常定位到,只是不能操作(定位元素和操作元素是两码事,操作元素是指click、clear、send_keys等这些方法)。我们可以用js来操作隐藏元素。js和selenium不同,只有页面上有的元素(在dom里面的)都能正常操作。21、如何判断一个页面上元素是否存在?法1:用try…except在代码块加上法2:用elements定义组元素方法然后根其元素个数len()<1存在返回True,不存在则返回F.

    2022年6月20日
    25
  • Pycharm快捷键及常用设置【建议收藏】

    Pycharm快捷键及常用设置【建议收藏】大家好 我是辣条 今天给大家整理了 Pycharm 快捷键整理和常用设置总结 能帮助到你的话一定要一键三连呦 认识 Pycharm 点击 File gt settings gt pycharm 主题网站 主题列表 ThemesMap 选择对应自己喜欢的主题下载是一个压缩包不需要解压然后你就 Apply gt OK 下面有一个滚动条可以调整透明度注意 在很多人在 cm

    2026年3月27日
    2
  • 锁定计算机 最新的,锁定计算机的方法

    锁定计算机 最新的,锁定计算机的方法您可能感兴趣的话题:锁定计算机核心提示:我们在用电脑时,电脑开着有时候会短暂的离开下电脑,而电脑上有些东西不想让其他的看到或是操作。本教程为大家介绍一些锁定计算机的方法。我们在用电脑时,电脑开着有时候会短暂的离开下电脑,而电脑上有些东西不想让其他的看到或是操作。可以设置一下安全保护方法。暂时锁定计算机。1.Win+L键法在WindowsXP中在任何时候按下Win+L(L是LockStation之…

    2022年7月21日
    17
  • C之 十九 使用WinForm控件

    C之 十九 使用WinForm控件十九使用 WinForm 控件比如说电脑有显示器 鼠标 主机以及键盘的基本元素组成 在 windows 窗体中也有其基本控件 这些控件在每一个窗体中都要用到 也就是说无所不在 有些控件可能外观不同但是他们的使用方式都基本上一样 重点 掌握这些控件常用属性方法以及事件 能用编码的形式实

    2026年3月26日
    2

发表回复

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

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