当前位置: 首页 > 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.jsqmd.com/news/993764/

相关文章:

  • 手把手教你给RT-Thread设备加个“黑匣子”:用W25Q128和ulog实现日志持久化存储
  • PyTorch开放集识别实战工具包:支持MNIST/CIFAR/ImageNet,集成OpenMax、Center-Loss与VAE建模
  • C#版NFC开发套件:支持MIFARE Classic读写与Crypto1加解密的即用工程
  • 徐州SEO优化公司|中小企业百度排名优化,徐州网络推广公司选型参考(第2期) - 招财兔数字员工
  • 合肥道路救援哪家好?这份top5机构实践经验分享别错过! - 资讯速览
  • IINA:macOS平台终极视频播放器完整指南
  • 全城包包回收横向测评,迪奥 Book tote 出手认准 TOP1 - 禹竞
  • 2026高性价比318自驾服务商排行 实测维度解析 - 互联网科技品牌测评
  • 如何高效管理RGB设备:OpenRGB开源跨平台解决方案指南
  • 5分钟搞定黑苹果EFI配置:OpenCore Simplify终极指南
  • 5分钟上手MarkLite:Swift开发的极致简约Markdown编辑器完全指南
  • Layui组件库深度解析:如何构建高性能的原生Web UI组件
  • 厦门翡翠回收怎么卖高价!本地A货手镯挂件无套路出手攻略 - 开心测评
  • GR3六轴机械臂本文详细披露了GR3六轴机械臂的底层控制核心参数,包含18项关键技术指标:1) 650Hz带宽的相位锁相环同步控制;2)三相电流动态均衡算法;3)轨迹拐角2.2mm最小过渡半径配置;4
  • 还在手动整理小红书视频?
  • 跨省寄件怎么收费?最新价格对比与省钱技巧 - 快递物流资讯
  • 如何用 so-vits-svc 实现专业级歌声转换?从零开始掌握AI音色变换技术
  • 2026年出国留学申请福州哪家中介服务省心:五家优选解析 - 科技焦点
  • 我用AI生成的SQL,差点在生产库上跑了一整夜
  • 关于进程
  • VB.NET写的Modbus RTU串口调试小工具,支持线圈开关、寄存器读写和报文监控
  • 终极指南:使用ChromePass高效管理浏览器密码的完整方案
  • 2026杭州最新纺织厂/拉毛厂哪家工艺强,设备齐全,合作无套路 - 天天生活分享日志
  • 2026 汕尾黄金回收价位盘点 全城实体门店综合测评 - 靖昱黄金回收
  • PMBOK第七版视角:项目整合管理的核心实践与价值交付
  • GCC完全指南
  • 2026优选:双登蓄电池厂家,专业支撑铅酸工业电池与免维护电池的高效伙伴 - 企业推荐官【官方】
  • 实测干货! 2026上海落户机构推荐 TOP5 助力留学生职场人合规快速办理落户 - 资讯速览
  • 大模型之交互式应用(理论篇)
  • MiniMax M3 发布实测:国产模型编程能力首次超越 GPT-5.5