zoukankan      html  css  js  c++  java
  • 连通性判断

    试题描述

    无向图,包含n个节点编号1至n,初始没有边。

        现在逐次向图中添加m条边,你需要在添加边之前判断该两点是否连通。

    输入
    第一行两个正整数n、m。
    接下来m行,每行两个正整数x、y。
    输出
    m行,每行包含一个整数0或1,0表示添加这条边之前两个点不连通,1表示连通。
    输入示例
    4 5
    1 2
    1 3
    2 3
    4 4
    3 4
    输出示例
    0
    0
    1
    1
    0
    其他说明
    n,m<=300000。
     1 #include <iostream>
     2 
     3 using namespace std;
     4 int f[301010];
     5 int find(int a)   //找根节点 
     6 {
     7     if(f[a]==a) return f[a];
     8     f[a]=find(f[a]);
     9     return f[a];
    10 }
    11 int main()
    12 {
    13     int n,m;
    14     scanf("%d%d",&n,&m);
    15     for(int i=1;i<=n;i++) f[i]=i;  //初始化 
    16     for(int i=1;i<=m;i++)
    17     {
    18         int x,y;
    19         scanf("%d%d",&x,&y);
    20         if(find(x)==find(y)) printf("1
    ");   //两个点的根节点相等,说明他们连同 
    21         else 
    22         {
    23             printf("0
    ");
    24             f[find(x)] = find(y);  //在find的过程中,会把x这一条线全部更新为以y的根节点为根节点的顶点 
    25         }
    26     }
    27     //system("pause");
    28     return 0;
    29 }
    连通性判断
  • 相关阅读:
    30-JDBC(2)
    29-JDBC(1)
    27-网络编程
    26-IO(中)
    git push 报错
    IsEmpty和isBlank区别
    java.lang.NumberFormatException: For input string: "0.9"
    Integer与Double类型转换
    Lambda 表达式排序
    Number & Math 类方法
  • 原文地址:https://www.cnblogs.com/YXY-1211/p/5709702.html
Copyright © 2011-2022 走看看