news 2026/5/12 18:32:39

信息学奥赛一本通 1528:【例 2】单词游戏

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
信息学奥赛一本通 1528:【例 2】单词游戏

【题目链接】

ybt 1528:【例 2】单词游戏

【题目考点】

1. 图论:欧拉图
  • 有向图欧拉回路判定的充要条件:
    该图是弱连通图,所有顶点的入度等于出度。
  • 有向图欧拉路径判定的充要条件:
    该图是弱连通图,只有一个顶点的出度比入度大1,一个顶点的入度比出度大1,其余顶点的入度等于出度。

【解题思路】

一个单词可以看作一个顶点,如果一个单词A的末尾字母和单词B的首字母相同,可以看作从顶点A到顶点B有一条有向边。本题要所有的单词首尾连接,即需要找到该图的一条欧拉路径(包括欧拉回路)。
首先判断该图是否存在欧拉路径。
输入一个单词,将单词的首尾字母转为顶点编号(字符a转为1,字符b转为2,…,字符c转为c-'a'+1
单词的首字母表示的顶点到单词末尾字母表示的顶点设一条有向边,保存在邻接表中。
如果顶点A到顶点B有一条有向边,那么顶点A的出度增加1,顶点B的入度增加1。

判断该图是否存在欧拉路径,首先这个图应该是弱连通图,也就是说,将所有的边当做无向边,看这个无向图(原图的基图)是否为连通图,如果是,那么这个图是弱连通图。
判定一个无向图是否是连通图,可以使用深搜或广搜遍历图的方法,也可以使用并查集。
相关方法见:信息学奥赛一本通 1362:家庭问题(family)

本题使用并查集来判定该有向图的基图是否是连通图。将每条边连接的两个顶点所在的集合(连通分量)合并,最后统计集合的数量,即为该图的连通分量的数量。如果连通分量的数量为1,该图为连通图。
本题中不统计孤立点作为一个连通分量的情况,所以在看一个顶点是否为集合的根结点前,要先判断该顶点是否存在入度或出度。如果入度或出度大于0,该顶点就不是孤立点。

因为本题是判断一个图是否为欧拉图或半欧拉图。孤立点不与边相连,一个图是否是欧拉图,与孤立点的数量没有关系。尽管从概念上来说,一个孤立点也是一个连通分量,而本题应该统计有边参与的连通分量的数量,因此统计连通分量时应该不统计孤立点。

遍历所有的顶点:

  • 如果顶点的入度等于出度,则跳过该顶点
  • 统计入度比出度大1的顶点数量stNum与出度比入度大1的顶点数量edNum
  • 如果出现其他情况,如顶点的入度与出度的差值大于等于2,或出度与入度的差值大于等于2,该图一定不是欧拉图或半欧拉图,不存在欧拉路径。

遍历结束后

  • 如果stNum与edNum都为0,说明该图的所有顶点的入度与出度都相等,是欧拉图。
  • 如果stNum与edNum都为1,说明该图存在1个入度比出度大1的顶点,存在一个出度比入度大1的顶点,其余顶点都入度等于出度,该图是半欧拉图。
  • 其他情况,该图不是欧拉图或半欧拉图,不存在欧拉路径。

根据该图是否存在欧拉路径,输出结果。

【题解代码】

解法1:使用并查集判断基图是否为连通图
#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=30;intt,n,cnt,fa[N],degIn[N],degOut[N];voidinitFa(intn){for(inti=1;i<=n;++i)fa[i]=i;}intfind(intx){returnx==fa[x]?x:fa[x]=find(fa[x]);}voidmerge(intx,inty){fa[find(x)]=find(y);}boolhasEulerPath(){intstNum=0,edNum=0;for(inti=1;i<=26;++i)if(degIn[i]!=degOut[i]){if(degIn[i]-degOut[i]==1)stNum++;elseif(degOut[i]-degIn[i]==1)edNum++;else//如果顶点i入度出度不等,或有多个入度比出度大1/出度比入度大1的顶点,或有入度出度差值不为1的顶点,则该图不存在欧拉路径returnfalse;}returnstNum==0&&edNum==0||stNum==1&&edNum==1;}intmain(){string s;cin>>t;while(t--){memset(degIn,0,sizeof(degIn));memset(degOut,0,sizeof(degOut));cnt=0;cin>>n;initFa(26);for(inti=1;i<=n;++i){cin>>s;intu=s.front()-'a'+1,v=s.back()-'a'+1;degIn[v]++,degOut[u]++;merge(u,v);}for(inti=1;i<=26;++i)if((degIn[i]>0||degOut[i]>0)&&fa[i]==i)//该顶点在连通图中,且该顶点是根结点cnt++;if(cnt==1&&hasEulerPath())cout<<"Ordering is possible.\n";elsecout<<"The door cannot be opened.\n";}return0;}
解法2:dfs判断基图是否为连通图

换一种写法进行欧拉图判定

#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=30;intt,n,cnt,degIn[N],degOut[N],edge[N][N];boolvis[N];voiddfs(intu){vis[u]=true;for(intv=1;v<=26;++v)if(edge[u][v]&&!vis[v])dfs(v);}boolhasEulerPath(){boolhalfEuler=false,hasSt=false,hasEd=false;//halfEuler:是否为半欧拉图 hasSt:是否有出度比入度大1的顶点 hasEd:是否有入度比出度大1的顶点for(inti=1;i<=26;++i)if(degIn[i]!=degOut[i]){halfEuler=true;if(!hasEd&&degIn[i]-degOut[i]==1)hasEd=true;elseif(!hasSt&&degOut[i]-degIn[i]==1)hasSt=true;else//如果顶点i入度出度不等,或有多个入度比出度大1/出度比入度大1的顶点,或有入度出度差值不为1的顶点,则该图不存在欧拉路径returnfalse;}return!halfEuler||hasSt&&hasEd;}intmain(){string s;cin>>t;while(t--){memset(degIn,0,sizeof(degIn));memset(degOut,0,sizeof(degOut));memset(edge,0,sizeof(edge));memset(vis,0,sizeof(vis));cnt=0;cin>>n;for(inti=1;i<=n;++i){cin>>s;intu=s.front()-'a'+1,v=s.back()-'a'+1;edge[u][v]=edge[v][u]=1;//建原有向图的基图(无向图)degIn[v]++,degOut[u]++;}for(inti=1;i<=26;++i)if((degIn[i]>0||degOut[i]>0)&&!vis[i]){dfs(i);cnt++;}if(cnt==1&&hasEulerPath())cout<<"Ordering is possible.\n";elsecout<<"The door cannot be opened.\n";}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 22:05:53

智谱新开源模型体验:GLM-4.6V-Flash-WEB上手分享

智谱新开源模型体验&#xff1a;GLM-4.6V-Flash-WEB上手分享 在当前多模态AI快速发展的背景下&#xff0c;开发者对高效、易用且可本地部署的视觉语言模型需求日益增长。传统多模态系统往往依赖高算力GPU集群和复杂的工程配置&#xff0c;限制了中小团队或个人开发者的实践门槛…

作者头像 李华
网站建设 2026/4/28 6:48:06

AI语音增强新选择|FRCRN-16k大模型镜像快速上手体验

AI语音增强新选择&#xff5c;FRCRN-16k大模型镜像快速上手体验 1. 引言&#xff1a;AI语音增强的现实挑战与技术演进 在智能语音交互、远程会议、安防监控等实际应用场景中&#xff0c;语音信号常常受到环境噪声、设备采集质量等因素的干扰&#xff0c;导致可懂度下降。传统…

作者头像 李华
网站建设 2026/5/10 0:52:23

AI智能二维码工坊大数据分析:扫码行为统计部署教程

AI智能二维码工坊大数据分析&#xff1a;扫码行为统计部署教程 1. 引言 1.1 业务场景描述 在数字化运营中&#xff0c;二维码已成为连接线上与线下服务的核心入口。无论是营销推广、产品溯源还是用户引流&#xff0c;企业对二维码的依赖日益加深。然而&#xff0c;传统二维码…

作者头像 李华
网站建设 2026/5/12 2:44:22

基于AutoGLM-Phone-9B的多模态推理实践|支持视觉语音文本融合

基于AutoGLM-Phone-9B的多模态推理实践&#xff5c;支持视觉语音文本融合 1. 引言&#xff1a;移动端多模态大模型的应用前景 随着智能终端设备对AI能力的需求日益增长&#xff0c;如何在资源受限的移动平台上实现高效、低延迟的多模态推理成为关键技术挑战。传统大语言模型通…

作者头像 李华
网站建设 2026/5/9 20:01:21

如何快速实现图片智能抠图?CV-UNet大模型镜像轻松搞定

如何快速实现图片智能抠图&#xff1f;CV-UNet大模型镜像轻松搞定 1. 引言&#xff1a;图像抠图的技术演进与现实需求 随着数字内容创作的普及&#xff0c;图像智能抠图已成为电商、设计、影视后期等领域的基础能力。传统手动抠图依赖专业软件和人工操作&#xff0c;效率低且…

作者头像 李华
网站建设 2026/5/9 10:33:07

Z-Image-ComfyUI API封装:构建私有图像生成服务

Z-Image-ComfyUI API封装&#xff1a;构建私有图像生成服务 1. 引言 随着AIGC技术的快速发展&#xff0c;文生图模型在内容创作、设计辅助和智能媒体等场景中展现出巨大潜力。阿里最新推出的Z-Image系列模型凭借其高效推理、双语文本支持和强大的指令遵循能力&#xff0c;迅速…

作者头像 李华