1003

题目编号:1003

题目大意:某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不      一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?

解题思路:题目大意说直白点就是求可以最少多少条线把子连通图连起来使其成为一个大的连通图。这道题用并查集的方法将每个子连通图表示成每个独立的集合,然后求有多少个集合即可。难点就在于如何表示成集合。首先创建数组,初始化时候看城镇的个数,数组的标号等于数组的值,表示每个城镇对应的是不同的集合,也就是一开始每个城镇都是独立的个体,然后开始添加道路。输入2个城镇,首先找到每个城镇的集合号,如果这两个城镇的集合号相同,那么表示着2个城镇是互通的,不需要再动了;如果不相同,表示他们有着共同的双亲,将一个城镇的集合号数作为城镇赋值给另个城镇的集合号数的集合号,简而言之就是并入同一个集合,他们是祖先也就成为了集合号数,也就是树的根节点。对于输出,判断有都是个独立的集合即可。

做题感想:感觉是一个新颖的东西,一开始有点难接受,而且只讲了一个例题,觉得有点疑惑,这个方法是不是只是针对一特定的题目,适用性好像不是很强。

#include<iostream>
using namespace std;
int arr[1000];
int find(int x)
{
    int r=x;
    while(arr[r]!=r)
       r=arr[r];
    return r;
}
void merge(int x,int y)
{
    int a,b;
      a=find(x);
      b=find(y);
    if(a!=b)
      arr[a]=b;
}
int main()
{

    int i,a,b;
    int x,y;
    int count;
    while(cin>>a)
    {
        if(a)
        {
            cin>>b;
            count=0;
            for(i=1;i<=a;i++)
             arr[i]=i;
            for(i=1;i<=b;i++)
            {
                cin>>x>>y;
               merge(x,y);
            }
           for(count=-1,i=1;i<=a;i++)
             if(arr[i]==i)
               count++;
        cout<<count<<endl;
        }
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: POSIX是一个为了提高计算机系统互操作性而制定的一系列标准。POSIX 1003是在1988年由IEEE制定的一项标准,也被称为POSIX.1或UNIX标准。它包含了一系列操作系统接口的定义,如文件操作、进程管理、信号处理、线程管理等。POSIX 1003旨在使不同的UNIX系统之间具有更好的兼容性,以便软件可以在不同的UNIX系统上进行移植。 POSIX 1003的主要目标是为了提供一个通用的操作系统接口,不仅仅限于UNIX系统,也可以应用于其他类UNIX的操作系统。这样可以方便开发人员编写一次代码,就能在多个UNIX系统上运行,并且充分利用各个系统的功能和特性。 POSIX 1003规定了一系列C语言的API,开发人员可以使用这些API调用来实现各种操作系统相关的功能。这些API包括了文件I/O、进程管理、线程管理、信号处理等常见的操作系统功能。通过使用POSIX 1003,开发人员可以编写出更具可移植性的代码,从而减少了在不同UNIX系统上移植代码的工作量。 除了POSIX 1003之外,还有其他的POSIX标准,如POSIX 1003.1b(对于实时扩展)、POSIX 1003.1c(对于国际化扩展)等。这些标准在不断地发展和更新,以适应不断变化的计算机系统需求。虽然POSIX标准是为UNIX系统设计的,但很多非UNIX操作系统也在采用POSIX标准,以提供更好的兼容性和一致性。 总而言之,POSIX 1003是一个标准化的接口集合,旨在提高计算机系统的兼容性和可移植性。通过遵循POSIX 1003,开发人员可以更轻松地编写跨平台的应用程序,从而提高工作效率。 ### 回答2: POSIX (Portable Operating System Interface) 1003是一组操作系统接口标准,目的是为了提供操作系统内核与应用程序之间的标准接口。 POSIX 1003标准最初由IEEE (Institute of Electrical and Electronics Engineers) 开发,并于1988年发布。该标准的目的是为了提供可移植性,使得应用程序可以在不同的操作系统上运行,而无需进行大量的修改。POSIX 1003标准为开发者提供了一组系统调用、库函数和工具命令,以及用于描述系统行为的规范。 POSIX 1003标准涉及多个领域,包括文件系统、进程管理、线程、信号处理、网络通信等。通过采用POSIX 1003标准,开发者可以使用一致的API来访问这些功能,而不必考虑底层操作系统的差异。 举例来说,POSIX 1003的文件系统API定义了一组函数来操作文件和目录,如打开、读取、写入、关闭文件等。无论是在Windows系统还是在Linux系统,开发者可以使用相同的函数调用来实现这些操作。这样一来,开发者只需要编写一次代码,即可在不同的操作系统上运行,从而提高了代码的可移植性和开发效率。 此外,POSIX 1003还定义了一系列环境变量、系统错误码、管道机制等,进一步增强了系统间的统一性和互操作性。 综上所述,POSIX 1003是一种可以跨不同操作系统平台使用的标准接口。它提供了一致的API,促进了可移植性和代码的重用性,使开发者能够更轻松地开发和维护跨平台的应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值