zoukankan      html  css  js  c++  java
  • 今天是leetcode685 冗余连接

    今天是leetcode685 冗余连接

    • 这题容易想到的是有几种情况能找到多余的边
    1. 有两条边同时指向某个点(冲突)

    img

    1. 根节点被某条边指向(成环)

    img

    用如下代码记录冲突和环路

    if(p[to] != to) {//若该边指向的点已有父点,则产生冲突
                    con = i;//记录冲突边
                }
                else {//若该边不是产生冲突的边
                    p[to] = from;
                    if(find(to) == find(from)) {
                        cur = i;//若该边连接的两点经过查询属于同一连通集,则产生环路。
                    }else {
                        union(from, to); 
                    }
                    
                }
    

    那怎么根据上述两种情况找到满足条件的多余边呢?

    1. 针对第一种情况,答案肯定是在这两条边中的一个,那么是哪一个呢?

    这里又涉及两种情况,图中存在环和不存在环

    • 若图中存在环,那么答案一定是两条边中在环上的那一个。然而怎么找到在环上的那一个呢?

    导致冲突的那一条边不会被判定成成环,因此是另一条边。

    (即使真的有一种情况是冲突和成环是同一边,那也会被判定为无环,而这种情况下就会将这条边作为答案)

    img

    • 若图中无环,那就选择这两条边中后出现的那个,也就是记录在案的产生冲突的边。

    img

    1. 针对第二种情况,图中肯定有环,这时如果图中有冲突,则按前述方法,如果图中无冲突,则选择成环的最后一条边,即产生环路的边。
  • 相关阅读:
    HRMSYS项目源码分析(二)
    HRMSYS项目源码分析(一)
    SQL类型转换以及自动在前面补0满足10位工号标示法
    android—资源文件(res)的引用
    SQL serve创建与调用存储过程
    .wsdl文件生成.cs文件
    android 文件操作类简易总结
    android EncodingUtils
    FTP创建与操作
    如何调试框架中的app
  • 原文地址:https://www.cnblogs.com/agnes6/p/13687752.html
Copyright © 2011-2022 走看看