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

    并查集模板

    题目链接1

    题目链接2

    题目链接3

     

    代码:

    1.

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 using namespace std;
     6 int fa[1000050],n,m;
     7 int f(int x)
     8 {
     9     if(fa[x]==x) return x;
    10     else fa[x]=f(fa[x]);
    11     return fa[x];
    12 }
    13 void unionn(int x,int y)
    14 {
    15     fa[f(x)]=f(y);
    16 }
    17 int main()
    18 {
    19     int x,y,b;
    20     scanf("%d%d",&n,&m);
    21     for(int i=1;i<=n;i++)
    22     fa[i]=i;
    23     for(int i=1;i<=m;i++)
    24     {
    25         scanf("%d%d%d",&b,&x,&y);
    26         if(b==1)
    27         unionn(x,y);
    28         else{
    29             if(f(x)==f(y)) printf("Y
    ");
    30             else printf("N
    ");
    31         }
    32     }
    33     return 0;
    34 } 

    2.

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 using namespace std;
     6 int fa[5050],n,m,p;
     7 int f(int x)
     8 {
     9     if(fa[x]==x) return x;
    10     else fa[x]=f(fa[x]);
    11     return fa[x];
    12 }
    13 void unionn(int x,int y)
    14 {
    15     fa[f(x)]=f(y);
    16 }
    17 int main()
    18 {
    19     int x,y;
    20     scanf("%d%d%d",&n,&m,&p);
    21     for(int i=1;i<=n;i++)
    22     fa[i]=i;
    23     for(int i=1;i<=m;i++)
    24     {
    25         scanf("%d%d",&x,&y);
    26         unionn(x,y);
    27     }
    28     while(p--)
    29     {
    30         scanf("%d%d",&x,&y);
    31         if(f(x)==f(y)) printf("Yes
    ");
    32         else printf("No
    ");
    33     }
    34     return 0;
    35 } 

     

    3.

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 using namespace std;
     5 int n,m,fat[5005],i,k,tot,x,y,z;
     6 struct e{
     7     int x,y,v;
     8 } a[200050];
     9 int find(int x)
    10 {
    11     if(fat[x]==x) return x;
    12     else fat[x]=find(fat[x]);
    13     return fat[x];
    14 }
    15 void unionn(int x,int y)
    16 {
    17     int fa=find(x),fb=find(y);
    18     fat[fa]=fb;
    19 }
    20 bool cmp(const e &x,const e &y)
    21 {
    22     return x.v<y.v;
    23 }
    24 int main()
    25 {
    26     cin>>n>>m;
    27     for(i=1;i<=m;i++)
    28     a[i].v=0x7ffffff;
    29     for(i=1;i<=m;i++)
    30     cin>>a[i].x>>a[i].y>>a[i].v;
    31     sort(a+1,a+1+m,cmp);
    32     for(i=1;i<=n;i++) fat[i]=i;
    33     for(i=1;i<=m;i++)
    34     {
    35         if(find(a[i].x)!=find(a[i].y))
    36         {
    37             unionn(a[i].x,a[i].y);
    38             tot+=a[i].v;
    39             k++;
    40             if(k==n-1) break;
    41         }
    42     }
    43     if(k<n-1)
    44     {
    45         cout<<"orz"<<endl;
    46         return 0;
    47     }
    48     cout<<tot<<endl;
    49     return 0;
    50 }

     

  • 相关阅读:
    59、web框架以及Django框架
    58、bootstrap
    56、jQuery事件
    55、原生js事件与jQuery
    36-并发编程
    4.20---远程执行命令的CS架构软件
    35-socket 基于套接字的TCP与UDP
    34-网络编程
    33-异常处理
    4.15---元类练习
  • 原文地址:https://www.cnblogs.com/yjkhhh/p/8494987.html
Copyright © 2011-2022 走看看