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

mother vertex using disjoint dataset in directed graph

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

我想知道它是否正确或 not.I 认为时间复杂度 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;
    
    
} 

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