微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用有向图中不相交的数据集的母顶点

如何解决使用有向图中不相交的数据集的母顶点

我使用DSU(不相交数据集)解决了经典的母亲顶点问题。我已经使用了路径压缩。

我想知道它是否正确。我认为时间复杂度为O(E log(V))。

解决方案按

进行
  1. 初始化每个顶点的父级
  2. 只要有优势,就尝试加入他们。请注意,如果2已经有其他父对象,则不能合并1-> 2!就像图是1-> 2,3-> 4,2-> 4
  3. 此处边线1-> 2合并为par [1] = par [2] = 1,而3-> 4合并为par [3] = par [4] = 3。
  4. 当要合并2-> 4时,因为par [4]!= 4,所以我们再也无法进入该组了。
  5. 最后,检查所有父顶点,如果它们都相等,则存在母顶点。

代码是:

  class dsu
{
    public:
  int cap;
  vector<int> par;
  
  dsu(int n)
  {
      cap = n; 
      par.resize(cap);
      for(int i=0;  i<cap; i++)
       par[i] = i;
  }
  
  int get(int a)
  {
      while(a!= par[a])
      {
          par[a] = par[par[a]];
          a = par[a];
      }
      return a;
  }
  void join(int a,int b)
  {
        a= get(a);
      int pb= get(b);
      if(pb!=b)
       return ;
       par[pb] = a;
       
  }
  
  
};

int findMother(int n,vector<int> g[]) 
{ 
    // Your code here   
    // do disjoint data set,if everyone;s parent is same woohla! i have found the mother vertex
    
    dsu arr(n);
    
    for(int i=0; i< n; i++)
    {
       for(auto a: g[i])
        {
        arr.join(i,a);}
    }
    
    int mother = arr.get(0);
    for(int i=1; i<n; i++)
    {
        if(mother != arr.get(i))
        return -1;
        
    }
    
    return mother;
    
    
} 

解决方法

经过一些研究,我发现这是正确的。可以用来查找母顶点。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。