zoukankan      html  css  js  c++  java
  • 1579. 保证图可完全遍历(并查集)

     

     

    class Solution {
    
        int[] pa;
        int[] pb;
    
        public int find(int[] p, int x) {
            if(p[x] != x) p[x] = find(p,p[x]);
            return p[x];
        }
    
        public int maxNumEdgesToRemove(int n, int[][] edges) {
            int m = edges.length;
            pa = new int[n+1];
            pb = new int[n+1];
            for(int i = 1; i <= n; i++) {
                pa[i] = i;
                pb[i] = i;
            }
            int sizea = 0, sizeb = 0, res = 0;
            for(int[] e : edges) { // 优限遍历蓝边,两人都可以通过
                if(e[0] == 3) {
                    int a = e[1], b = e[2];
                    int fa = find(pa,a), fb = find(pa,b);
                    int ffa = find(pb,a), ffb = find(pb,b);
                    if(fa != fb) { // 先遍历蓝边两人是同步的,过不过得去是同步的
                        sizea++;
                        pa[fa] = fb;
                        sizeb++;
                        pb[ffa] = ffb;
                    } else {
                        res++; // 已联通就删除这条变
                    }
                }
            }
            for(int[] e : edges) { // 遍历红边
                if(e[0] == 1) {
                    int a = e[1], b = e[2];
                    int fa = find(pa,a), fb = find(pa,b);
                    if(fa != fb) {
                        sizea++;
                        pa[fa] = fb;
                    }
                    else res++;
                }
            }
            for(int[] e : edges) { //遍历绿边
                if(e[0] == 2) {
                    int a = e[1], b = e[2];
                    int fa = find(pb,a), fb = find(pb,b);
                    if(fa != fb) {
                        sizeb++;
                        pb[fa] = fb; 
                    }
                    else res++;
                }
            }
            if(sizea == n - 1 && sizeb == n - 1) {
                return res;
            } else {
                return  -1;
            }
        }
    }
  • 相关阅读:
    S2dao 简单Demo(转)
    Iphone SDK textField 打开和关闭键盘
    s2dao 入门知识2
    Eclipse tomcat Web页面调试
    s2dao 入门知识1
    java 面试
    Iphone SDK ActionSheet 在当前窗口弹出时间选择
    杭电2044
    杭电2076
    杭电2077
  • 原文地址:https://www.cnblogs.com/yonezu/p/13630854.html
Copyright © 2011-2022 走看看