当前位置: 首页 > news >正文

UVa 459 Graph Connectivity

题目描述

题目要求计算给定无向图中极大连通子图(即连通分量)的数量。图的节点由大写字母表示,输入给出最大节点名称(即节点集合为A\texttt{A}A到该字符),以及若干条边。需要输出连通分量的个数。

输入格式

第一行一个整数NNN,表示测试用例的数量,后面跟一个空行。每个测试用例的第一行是一个大写字母,表示最大节点名称(例如E表示节点为A,B,C,D,E\texttt{A,B,C,D,E}A,B,C,D,E)。接下来若干行,每行两个大写字母,表示一条边。输入以空行结束。两个连续测试用例之间由一个空行分隔。

输出格式

对于每个测试用例,输出一行一个整数,表示连通分量的个数。两个连续测试用例的输出之间由一个空行分隔。

样例

输入

1 E AB CE DB EC

输出

2

题目分析

本题的核心是计算无向图的连通分量数量。可以使用并查集(Union-Find\texttt{Union-Find}Union-Find)高效求解。

并查集实现

  • 初始化:每个节点自成一集合,父节点指向自身。
  • 对于每条边(u,v)(u, v)(u,v),将uuuvvv所在的集合合并。
  • 最终统计有多少个节点是其所在集合的代表元(即parent[i] == i),即为连通分量数。

节点范围

节点从A\texttt{A}A开始到输入的最大字母结束。例如最大字母为E,则节点为A,B,C,D,E\texttt{A,B,C,D,E}A,B,C,D,E555个。不需要考虑不在该范围内的其他字母。

输入处理

  • 第一行是最大节点名称(如E),需要记录该字符并转换为索引。
  • 后续行每行两个大写字母表示一条边,可能有多余空格,但每行只包含两个字母。
  • 输入以空行结束,需要正确读取。

复杂度分析

并查集操作近似常数,总复杂度O(边数×α(N))O(\text{边数} \times \alpha(N))O(边数×α(N)),其中N≤26N \le 26N26

代码实现

// Graph Connectivity// UVa ID: 459// Verdict: Accepted// Submission Date: 016-07-15// UVa Run Time: 0.000s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intparent[26],ranks[26];voidmakeSet(){for(inti=0;i<26;i++){parent[i]=i;ranks[i]=0;}}// 带路径压缩的查找,使用递归实现。intfindSet(intx){return(x==parent[x]?x:parent[x]=findSet(parent[x]));}// 集合的按秩合并。voidunionSet(intx,inty){x=findSet(x);y=findSet(y);if(x==y)return;if(ranks[x]>ranks[y])parent[y]=x;else{parent[x]=y;if(ranks[x]==ranks[y])ranks[y]++;}}intmain(intargc,char*argv[]){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);intcases;cin>>cases;cin.ignore(1024,'\n');string line;getline(cin,line);for(inti=1;i<=cases;i++){if(i>1)cout<<endl;makeSet();intmaxIndex=0;while(getline(cin,line),line.length()>0){if(line.length()==1){maxIndex=line.front()-'A';continue;}for(inti=1;i<line.length();i++)unionSet(line[i]-'A',line.front()-'A');}intcounter=0;for(inti=0;i<=maxIndex;i++)if(parent[i]==i)counter++;cout<<counter<<endl;}return0;}
http://www.rkmt.cn/news/1505520.html

相关文章:

  • 徐州SEO优化公司|中小企业百度排名优化,徐州网络推广公司选型参考(第2期) - 招财兔数字员工
  • C#版NFC开发套件:支持MIFARE Classic读写与Crypto1加解密的即用工程
  • 合肥道路救援哪家好?这份top5机构实践经验分享别错过! - 资讯速览
  • IINA:macOS平台终极视频播放器完整指南
  • 2026高性价比318自驾服务商排行 实测维度解析 - 互联网科技品牌测评
  • Layui组件库深度解析:如何构建高性能的原生Web UI组件
  • 如何用 so-vits-svc 实现专业级歌声转换?从零开始掌握AI音色变换技术
  • 2026年出国留学申请福州哪家中介服务省心:五家优选解析 - 科技焦点
  • 跨省寄件怎么收费?最新价格对比与省钱技巧 - 快递物流资讯
  • 2026 汕尾黄金回收价位盘点 全城实体门店综合测评 - 靖昱黄金回收
  • 2026杭州最新纺织厂/拉毛厂哪家工艺强,设备齐全,合作无套路 - 天天生活分享日志
  • 2026年Q2升降机厂家权威排名:TOP5推荐榜、国内知名升降机厂家、安徽升降机厂家推荐”、“安徽升降机厂家名单、升降机厂家电话18356581485 - 安互工业信息
  • 计算机毕业设计之基于Python的教师科研成果数据管理系统的设计与实现
  • Navicat重置试用期终极方案:3种方法解决14天限制问题
  • BiliBiliCCSubtitle实战指南:高效下载与转换B站CC字幕的完整解决方案
  • Buzz语音转录技术深度剖析:本地化AI转录引擎架构解析
  • 如何实现多语言歌词罗马化:Rush支持中日韩印等语言的音译技术详解
  • NFC NTAG21xF芯片实战:从场检测低功耗到内存管理全解析
  • DVR机箱加工
  • 深入解析P8xC562:80C51增强型MCU的捕获比较、ADC与PWM外设设计
  • 第【15】期--基于支持向量机(svm) 的M-QAM信号判决实现-maltab完整代码
  • 江苏纳米板隔热片供应商优选:奥创特新核心考量与实力解析 - 起跑123
  • 国内主流五恒系统厂家实测排行:技术与落地实力对比 - 起跑123
  • Magika AI文件类型检测系统架构解析与高性能实践指南
  • 慧荣SM2259XT2主控开卡全攻略:从固件下载到B0KB颗粒实战测试
  • 基于内存补丁技术的企业级消息防撤回完整解决方案深度解析
  • Bloxstrap终极教程:5个必知功能与快速上手指南
  • 开源5G革命:UERANSIM如何重塑无线网络测试范式
  • 昇腾CANN计算机视觉专用算子库ops-cv快速上手实战教程:从环境配置到image/objdetect类接口调用的全步骤可复现操作指南
  • 2026年6月最新版湘西第三方CMACNAS甲醛检测治理机构口碑名单:万清CMA检测中心等5家公司深度测评万清CMA检测中心TOP1推荐 - 一修哥咨询