PTA 案例4-1.7 文件传输 (查并集)
发布日期:2021-05-07 10:01:35 浏览次数:23 分类:精选文章

本文共 1174 字,大约阅读时间需要 3 分钟。

当两台计算机双向连通的时候,文件是可以在两台机器间传输的。给定一套计算机网络,请你判断任意两台指定的计算机之间能否传输文件?

输入格式:

首先在第一行给出网络中计算机的总数 N (2≤N≤10
​4
​​ ),于是我们假设这些计算机从 1 到 N 编号。随后每行输入按以下格式给出:

I c1 c2

其中I表示在计算机c1和c2之间加入连线,使它们连通;或者是

C c1 c2

其中C表示查询计算机c1和c2之间能否传输文件;又或者是

S

这里S表示输入终止。

输出格式:

对每个C开头的查询,如果c1和c2之间可以传输文件,就在一行中输出"yes",否则输出"no"。当读到终止符时,在一行中输出"The network is connected.“如果网络中所有计算机之间都能传输文件;或者输出"There are k components.”,其中k是网络中连通集的个数。

输入样例 1:

5C 3 2I 3 2C 1 5I 4 5I 2 4C 3 5S

输出样例 1:

nonoyesThere are 2 components.

输入样例 2:

5C 3 2I 3 2C 1 5I 4 5I 2 4C 3 5I 1 3C 1 5S

输出样例 2:

nonoyesyesThe network is connected.

解题思路:

查并集基础题,涉及查询、建立,查看集个数

代码:

#include
using namespace std;int f[10010];int find(int a){ if(f[a]!=a)return f[a]=find(f[a]);//并查集,路径压缩 return a;}int main(){ int a,b,c,ans=0; char e; for(a=0;a<10010;a++) f[a]=a; cin>>a; while(1) { cin>>e; if(e=='C')//查询 { cin>>b>>c; if(find(b)==find(c))cout<<"yes"<
>b>>c; if(find(b)!=find(c))f[find(b)]=find(c); } else//结束 { for(b=1;b<=a;b++) if(f[b]==b)ans++; if(ans==1)cout<<"The network is connected."<
上一篇:github学习
下一篇:Spring集成Junit单元测试框架

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月05日 13时09分30秒