Uva 793 Network Connections

题目意思是有几台电脑,c开头的行是两个计算机相连,q开头是查询两个是否相连。

思路:并查集。

题目应该可以有几组输入,这是我在algorithmist网站上找的样例:

输入:

2

10
c 1 5
c 2 7
q 7 1
c 3 9
q 9 6
c 2 5
q 7 5

10
c 1 5
c 2 7
q 7 1
c 3 9
q 9 6
c 2 5
q 7 5

输出:

1,2

 

1,2

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5 #define MAX 100001
 6 using namespace std;
 7 
 8 int Computer;
 9 typedef struct node{
10     int data_;//节点对应人的编号
11     int rank_;//节点对应的秩
12     int parent_;//节点对应双亲下标
13 }UFSTree;
14 void MAKE_SET(UFSTree t[]);//初始化并查集树
15 int FIND_SET(UFSTree t[],int x);//在x所在子树中查找集合编号
16 void UNION(UFSTree t[],int x,int y);//将x和y所在的子树合并
17 int main()
18 {
19     #ifndef ONLINE_JUDGE
20         freopen("D:\\acm.txt","r",stdin);
21     #endif // ONLINE_JUDGE
22     int success,unsuccess;
23     char testCase[100];//数组要开的大一些,否则会re
24     int caseNum;
25     cin>>caseNum;
26     while(caseNum--){
27         cin>>Computer;
28         success = unsuccess = 0;
29         UFSTree t[MAX];
30         MAKE_SET(t);
31         getchar();
32         while(gets(testCase)){
33             if(testCase[0] == 0)break;
34             int x,y;
35             sscanf(testCase + 1, "%d%d",&x,&y);//要用输入流,用数组提取会wa
36             int xx = FIND_SET(t,x),yy = FIND_SET(t,y);
37             if(testCase[0] == 'c'){
38                 if(xx != yy )UNION(t,x,y);
39             }
40             if(testCase[0] == 'q'){
41                 if(xx != yy)unsuccess ++;
42                 else success ++;
43             }
44         }
45         cout<<success<<","<<unsuccess<<endl;
46         if(caseNum)cout<<endl;
47     }
48     return 0;
49 }
50 void MAKE_SET(UFSTree t[]){
51     for(int i = 1;i <= Computer;i++){
52         t[i].data_ = i;//数据为该人编号
53         t[i].rank_ = 1;//秩,即节点的个数
54         t[i].parent_ = i;//父节点指向自己
55     }
56 }
57 int FIND_SET(UFSTree t[],int x){
58     if(x != t[x].parent_){
59         return (FIND_SET(t,t[x].parent_));
60     }
61     else
62         return x;
63 }
64 void UNION(UFSTree t[],int x,int y){
65     x = FIND_SET(t,x);
66     y = FIND_SET(t,y);
67     if(x==y)return;
68     if(t[x].rank_ > t[y].rank_){
69             t[y].parent_ = x;
70             t[x].rank_ += t[y].rank_;
71     }
72     else{
73         t[x].parent_ = y;
74         t[y].rank_ += t[x].rank_;
75     }
76 }

 

转载于:https://www.cnblogs.com/ohxiaobai/p/4096323.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
在Ubuntu 20.04中,可以通过命令行来管理网络连接。这里使用network-manager来管理网络连接。首先,需要安装network-manager-l2tp包,可以使用以下命令进行安装:sudo apt install network-manager-l2tp。安装完成后,***连接,可以使用nmtui命令来打开Network Manager的文本用户界面。在界面中选择"Edit connections",然后选择"Add"来添加新的连接。选择"L2TP"作为连接类型,并填写必要的连接信息,如服务器IP地址、用户名和密码。完成后,保存设置并退出。 此外,你也可以使用nmcli命令行工具来管理网络连接。使用"nmcli connection add"命令来创建新的连接,可以指定连接类型、连接名称、服务器IP地址、用户名和密码等参数。使用"nmcli connection modify"命令来修改已有连接的设置。使用"nmcli connection up"命令来激活连接,使用"nmcli connection down"命令来断开连接。 总结起来,要在Ubuntu 20.04中管理网络连接,可以使用network-manager-l2tp包来创建***<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Ubuntu Server 20.04 上用命令行创建到机房内网的专用连接](https://blog.csdn.net/found/article/details/131399777)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Ubuntu Server 20.04使用network-manager接管网络管理](https://download.csdn.net/download/u011549040/85531314)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值