news 2026/6/25 13:38:03

UVa 599 The Forrest for the Trees

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UVa 599 The Forrest for the Trees

题目描述

题目要求统计给定森林中的树和“橡子”的数量。森林由若干连通分量组成,每个连通分量若是一棵树(无环)则计为树,若只有一个孤立节点(无边)则计为橡子。

输入格式

第一行一个整数nnn,表示测试用例数。每个测试用例包含两部分:

  1. 若干行边,每行格式为(A,B),以一行*结束。
  2. 一行顶点列表,格式为A,B,C,...

输出格式

对于每个测试用例,输出一行There are x tree(s) and y acorn(s).

样例

输入

2 (A,B) (B,C) (B,D) (D,E) (E,F) (B,G) (G,H) (G,I) (J,K) (K,L) (K,M) **** A,B,C,D,E,F,G,H,I,J,K,L,M,N (A,B) (A,C) (C,F) ** A,B,C,D,F

输出

There are 2 tree(s) and 1 acorn(s). There are 1 tree(s) and 1 acorn(s).

题目分析

本题的核心是使用并查集(Union-Find\texttt{Union-Find}Union-Find)统计连通分量,并判断每个分量是否为树。

算法

  • 对于每条边,将两个顶点合并。
  • 统计每个连通分量的顶点数和边数。
  • 若边数 = 顶点数−1- 11,则为树;若顶点数=1= 1=1且边数=0= 0=0,则为橡子。

复杂度分析

顶点数≤26\le 2626,边数有限。

代码实现

// The Forrest for the Trees// UVa ID: 599// Verdict: Accepted// Submission Date: 2016-08-12// UVa Run Time: 0.040s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;constintMAXN=26;intparent[MAXN],ranks[MAXN];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(){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);string line;getline(cin,line);intcases=stoi(line);for(inti=1;i<=cases;i++){memset(ranks,0,sizeof(ranks));memset(parent,-1,sizeof(parent));while(getline(cin,line),line.length()>0&&line.front()!='*'){intstart=-1,end=-1;for(intj=0;j<line.length();j++){if(isalpha(line[j])){if(start==-1)start=line[j]-'A';else{end=line[j]-'A';break;}}}if(parent[start]==-1)parent[start]=start;if(parent[end]==-1)parent[end]=end;unionSet(start,end);}while(getline(cin,line)){if(line.length()==0)continue;for(intj=0;j<line.length();j++)if(isalpha(line[j])){intvertex=line[j]-'A';if(parent[vertex]==-1)parent[vertex]=-2;}break;}inttrees=0,acorns=0;for(intj=0;j<26;j++)if(parent[j]==j)trees++;elseif(parent[j]==-2)acorns++;cout<<"There are "<<trees<<" tree(s) and "<<acorns<<" acorn(s).\n";}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/25 13:35:41

智人曾经这样灭绝猛犸象:AI入侵与行业灭绝

冰河时代绵延了将近十万年。 在它最后的尾声&#xff0c;全球气温以人类感知不到的速度缓慢上升。冰川退缩&#xff0c;海平面以每百年几厘米的节奏爬升。一条曾经宽达数百公里、将亚洲与北美洲连为一体的陆地走廊&#xff0c;在几千年里悄悄沉入水下&#xff0c;从地图上永远…

作者头像 李华
网站建设 2026/6/25 13:33:32

如何用3分钟解锁15+加密音乐格式:浏览器中的音乐自由革命

如何用3分钟解锁15加密音乐格式&#xff1a;浏览器中的音乐自由革命 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址: htt…

作者头像 李华
网站建设 2026/6/25 13:32:10

应届生为什么要先学技术再找工作?优选产品结构设计的就业优势

每年毕业季&#xff0c;数百万应届毕业生涌入就业市场&#xff0c;应届生就业难、薪资低、找不到对口工作成为普遍痛点。很多同学毕业后盲目投递简历&#xff0c;最终要么进入流水线、销售等可替代性极强的基础岗位&#xff0c;要么频繁面试碰壁、陷入就业迷茫。 对于零基础、缺…

作者头像 李华
网站建设 2026/6/25 13:29:47

NewTab Redirect! 终极指南:5步轻松定制你的Chrome新标签页

NewTab Redirect! 终极指南&#xff1a;5步轻松定制你的Chrome新标签页 【免费下载链接】NewTab-Redirect NewTab Redirect! is an extension for Google Chrome which allows the user to replace the page displayed when creating a new tab. 项目地址: https://gitcode.c…

作者头像 李华
网站建设 2026/6/25 13:29:15

淘宝闪购 AI 应用研发二面,我笑了!!!

面完试走出来&#xff0c;脑子还是嗡嗡的。说实话&#xff0c;面之前我觉得自己准备得还行&#xff0c;结果一个多小时聊下来&#xff0c;才发现好多东西只是知道个皮毛&#xff0c;稍微往深了问问&#xff0c;就开始冒冷汗。趁着记忆还热乎&#xff0c;赶紧把这场面试复盘一下…

作者头像 李华