zoukankan      html  css  js  c++  java
  • 并查集

    介绍

     

     

     

     

     

     

     

     

     

     

     

     

     

    int fa[100];
    int Find(int x)
    {
        if(fa[x]==x)return x;
        fa[x]=Find(fa[x]);
        return fa[x];
    }
    int main()
    {
      int x,y;
      sort(a+1,a+m+1,cmp);
      for(i=1;i<=n;i++)fa[i]=i;
      for(int i=1;i<=m;i++)
      {
          x=a[i].x;y=a[i].y;
          if(Find(x)!=Find(y))
          {
            ans+=a[i].k;
            fa[Find(x)]=Find(y);
          }
      }
      }
    }
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #define N 1000010
    using namespace std;
    int fa[N];
    int find(int x)
    {
        if(fa[x]==x) return x;
        int t=find(fa[x]);
        fa[x]=t;
        return t;
        //return fa[x]==x?x:fa[x]=find(fa[x]);
    }
    void merge(int x,int y)
    {
        x=find(x);
        y=find(y);
        if(x==y) return;
        fa[x]=y;
    }
    int m,x[N],y[N],f[N];
    void doit()
    {
        memset(fa,0,sizeof(fa));
        for(int i=1;i<=1000000;i++) fa[i]=i;
        cin>>m;
        for(int i=1;i<=m;i++)
        {
            cin>>x[i]>>y[i]>>f[i];
            if(f[i]==1) merge(x[i],y[i]);
        }
        bool ans=true;
        for(int i=1;i<=m;i++)
        {
            if(f[i]==0)
            {
                if(find(x[i])==find(y[i])) ans=false;
            }
        }
        puts(ans?"YES":"NO");
    }
    int main()
    {
        int T;
        cin>>T;
        while(T--) doit();
    }
  • 相关阅读:
    链表中环的入口节点
    链表中倒数第k个节点
    调整数组顺序使奇数位于偶数前面
    53. Maximum Subarray
    42. Trapping Rain Water
    48. Rotate Image
    css技巧一
    html语义
    label标签表单响应
    CSS清除浮动
  • 原文地址:https://www.cnblogs.com/liusu123456/p/12210135.html
Copyright © 2011-2022 走看看