zoukankan      html  css  js  c++  java
  • 牛客练习赛16 C 任意点【并查集/DFS/建图模型】

    链接:https://www.nowcoder.com/acm/contest/84/C
    来源:牛客网
    
    题目描述 
    平面上有若干个点,从每个点出发,你可以往东南西北任意方向走,直到碰到另一个点,然后才可以改变方向。
    请问至少需要加多少个点,使得点对之间互相可以到达。
    输入描述:
    第一行一个整数n表示点数( 1 <= n <= 100)。
    第二行n行,每行两个整数xi, yi表示坐标( 1 <= xi, yi <= 1000)。
    y轴正方向为北,x轴正方形为东。
    输出描述:
    输出一个整数表示最少需要加的点的数目。
    示例1
    输入
    2
    2 1
    1 2
    输出
    1
    示例2
    输入
    2
    2 1
    4 1
    输出
    0
    

    【分析】:

    若两个点横坐标或者纵坐标相同,两点间连一条边,通过dfs统计连通块的个数。

    当然并查集也是可以的,但由于不涉及给出任意两个点判断是否连通,因此dfs更轻便。

    【出处】:
    CodeForces 217A Ice Skating

    【代码】:

    /*
    将行相同或列相同的点合并为一棵树,最后看有多少棵树即可计算还需多少个点。
    */
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int father[1001];
    
    int find(int x)
    {
        if(father[x]==x)
           return x;
        else
           {
               father[x]=find(father[x]);
               return  father[x];
           }
    }
    
    void merge(int a,int b)
    {
        int fa=find(a);
        int fb=find(b);
        if(fa!=fb)
        {
          father[fb]=fa;
        }
    }
    
    int main()
    {
        int n;
        while(cin>>n&&n)
        {
            int x[n+1],y[n+1],ans=0;
    
            for(int i=1;i<=n;i++)
                father[i]=i;
            for(int i=1;i<=n;i++)
            {
                cin>>x[i]>>y[i];
            }
    
            for(int i=1;i<n;i++)
            {
                for(int j=i+1;j<=n;j++)
                {
                   if(x[i]==x[j]||y[i]==y[j])
                    {
                        merge(i,j);
                    }
                }
            }
    
            for(int i=1;i<=n;i++)
            {
               if(father[i]==i)
                   ans++;
            }
            cout<<ans-1<<endl;
        }
         return 0;
    }
    
    
  • 相关阅读:
    理解javascript 对象,原型对象、闭包
    JSON数据理解
    css 盒模型相关样式
    神奇的CSS3选择器
    设计模式六大原则
    java反射机制性能优化
    一份关于jvm内存调优及原理的学习笔记
    浅谈http请求数据分析
    Apache+Tomcat部署负载均衡(或集群)
    同台电脑部署多组Tomcat负载均衡(或集群)
  • 原文地址:https://www.cnblogs.com/Roni-i/p/8965670.html
Copyright © 2011-2022 走看看