UVA302 Johns trip 题解

news/2025/2/12 8:33:35/文章来源:https://www.cnblogs.com/w9095/p/18710874

UVA302 John's trip

给定一张图和起点,求从起点开始能否把每条边遍历一次后返回起点,并输出字典序最小的路径。

欧拉回路裸题,若可以达到题目的要求,则图中必然存在一条欧拉回路。我们可以记录每个点的连的边数,如果出现一个点连的边数为奇数,那么图中必定不存在欧拉回路,输出 Round trip does not exist. 即可。原因是如果存在欧拉回路,那么回到起点前,走到每个点时必定还有一条路离开。所以走到一个点是一条路,离开一个点又是一条路,合起来就是两条路。如果一个点被经过两次,那么就是四条路。易得欧拉回路中每个点连的边数为偶数。

然后,对于存在欧拉回路的情况,我们可以从起点出发进行 DFS。由于题目要求输出字典序最小的路径,所以我们先遍历编号小的边。参照输出经过的点的路径的做法,当一条边遍历完成之后,将其压入栈中,最后倒序输出。

注意,这里有一个小坑点:如果一条边在遍历中走过了,由于每一条边只能经过一次,所以就不能再走了,这点和输出经过的点的路径不一样。所以,在走边都时候要注意判断这条边已经走过没有,否则会得到错误结果。

另外,再重复一遍翻译里的话:每次输出完额外换一行

#include <bits/stdc++.h>
using namespace std;
struct egde
{int v,next,d;
}e[30000];
struct edgein
{int d,t;
};
int n,m,b,d[30000],h[30000],lu[60000],book[30000],cnt=0,tol=0;
bool cmp(struct edgein a,struct edgein b)
{return a.d<b.d;
}void add_edge(int u,int v,int d)
{e[++tol].next=h[u];e[tol].v=v;e[tol].d=d;h[u]=tol;
}void dfs(int now)
{int cn=0;struct edgein s[2000];for(int i=h[now];i;i=e[i].next)if(!book[e[i].d])s[++cn].d=e[i].d,s[cn].t=e[i].v;if(cn==0)return;sort(s+1,s+cn+1,cmp);for(int i=1;i<=cn;i++)if(!book[s[i].d]){int k=s[i].d;book[s[i].d]=1;dfs(s[i].t);lu[++cnt]=k;}
}int main()
{int u=0,v=0;while(scanf("%d%d",&u,&v)!=-1){if(u==0&&v==0)break;int flag1=1,flag2=0,flag3=0;scanf("%d",&b);n=max(n,max(u,v));m=min(u,v);d[u]++;d[v]++;add_edge(u,v,b);add_edge(v,u,b);while(scanf("%d%d",&u,&v)!=-1){if(u==0&&v==0)break;scanf("%d",&b);n=max(n,max(u,v));d[u]++;d[v]++;add_edge(u,v,b);add_edge(v,u,b);}for(int i=1;i<=n;i++){if(d[i]%2)flag3=1,flag1++;else if(d[i]%2&&i==m)flag2=1;}flag1=(flag1<=2)&&(!(flag2^flag3));if(flag1){dfs(m);for(int i=cnt;i>0;i--)if(i!=1)printf("%d ",lu[i]);else printf("%d",lu[i]);printf("\n\n");    }else printf("Round trip does not exist.\n\n");cnt=0;tol=0;memset(h,0,sizeof(h));memset(lu,0,sizeof(lu));memset(d,0,sizeof(d));memset(book,0,sizeof(book));}return 0;
}

AC记录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/882419.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware NSX Advanced Load Balancer (NSX ALB) 30.1.2 - 多云负载均衡平台

VMware NSX Advanced Load Balancer (NSX ALB) 30.1.2 - 多云负载均衡平台VMware NSX Advanced Load Balancer (NSX ALB) 30.1.2 - 多云负载均衡平台 应用交付:多云负载均衡、Web 应用防火墙和容器 Ingress 服务 请访问原文链接:https://sysin.org/blog/vmware-nsx-alb-30/ 查…

Symantec Endpoint Protection 14.3 RU10 v14.3.12154.10000 下载

Symantec Endpoint Protection 14.3 RU10 v14.3.12154.10000 下载Symantec Endpoint Protection 14.3 RU10 v14.3.12154.10000 下载 Broadcom | SEP | SEPM | 简体中文版 | 繁体中文版 | 英文版 请访问原文链接:https://sysin.org/blog/sep-14/ 查看最新版。原创作品,转载请保…

动态编译一个新的 NativeApi 类

要动态编译一个新的 NativeApi 类,可以按照以下步骤进行:创建一个新的 NativeApi 类。 在 NativeApi 类中定义所需的方法和属性。 在 MainPage 中实例化并使用新的 NativeApi 类。using MauiPlus; using System.Reflection.Emit; using System.Reflection;namespace MauiPlus…

2025年的10个营销关键词

在瞬息万变的营销领域,把握趋势是成功的关键。本文总结了 2025 年的 10 个营销关键词,帮助你在 2025 年的营销战场上脱颖而出。 关键词一:需求细分 产品是营销的前提,产品的价值和人群越精准越细分,越容易爆。不要再喊大而泛的口号。 比如,母婴品牌世喜设计了一款“防胀气…

2025 开工大吉:明确绩效目标,合理安排计划

随着春节假期的结束,我们迎来了新的一年,也迎来了充满希望与挑战的开工日。在这个全新的起点上,“开工大吉”不仅是一句美好的祝愿,更是对我们每一位员工工作态度与效率的期许。为了在新的一年里实现更大的突破与发展,我们需要有一个明确的目标导向和高效的工作计划。在这…

容器附加存储CAS之OpenEBS快速入门

作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 目录一.CAS之OpenEBS存储机制概述1.什么是CAS2.什么是OpenEBS3.OpenEBS数据引擎4.NDM(Node Disk Manager)5.部署OpenEBS的基本流程二.部署OpenEBS 一.CAS之OpenEBS存储机制概述 1.什么是CAS Kubernetes的卷…

【CodeForces训练记录】Codeforces Round 1004 (Div. 2)

训练情况赛后反思 这场太神奇了,都在和出题人对脑电波,全是智慧题 A题 我们考虑进位的情况,例如 9999 之类的,我们发现进位对答案的影响只有 \(x - 9k + 1 = y\),判断 \(k\) 是否存在非负整数解即可点击查看代码 #include <bits/stdc++.h> // #define int long long…

短信验证码爆破

漏洞原理 短信验证码验证时间和次数无限制,存在爆破可能 短信验证码有效期:5~10min,验证码位数4位或6位,纯数字 破解方式:使用枚举逐个尝试 使用BP爆破短信验证码可以先用已有手机号确认验证码位数2.发送验证码后将验证码输入,然后登陆抓包后续和爆破操作一致如果字典太大…

【洛谷P1955】程序自动分析[NOI2015]

今天开始学习并查集 什么是并查集呢?顾名思义,就是动态维护一个方便进行合并和查找的集合 我们采用的是树状结构 也就是说,对于一开始的每个元素 它的爸爸是它自己 然后在输入两个元素的从属关系的时候,通过路径压缩,把它的爸爸直接连到根节点 因为我们只关心这个元素在这…

chorme 系统代理设置

https 需要证书 1.使用BurpSuite导出CA证书,文件导出到本地2. 谷歌浏览器添加证书 谷歌浏览器->设置->搜索"证书"->安全->管理证书->管理从windows导入的证书->受信任的根证书颁发机构->导入第一步的证书3.设置系统代理 windows系统->设置-…

picachu 越权漏洞

1. 水平越权 1.查看提示信息,提供了3个普通用户2. 登陆其中一个账户,并查看个人信息3.根据url 可以看出有用户名信息,尝试在URL中更改其他账户名,发现查看到其他用户的信息4.再次点击查看个人信息按钮,信息更改为已登陆的用户的信息5. 查看源代码发现第27行username 的值是…

windows使用Makefile时自动给可执行文件加上.exe后缀

APP := main在使用makefile的时候,一般通过变量设置自己想要编译出来的可执行文件的名字在windows平台编译出来的可执行文件是需要.exe后缀的识别当前操作系统 通过识别当前的操作系统是什么,从而确定是否添加这个后缀在windows系统中,有这个环境变量说明自己的系统是windows而…