1. 程式人生 > >【hiho】14 無間道之並查集【圖論--並查集】

【hiho】14 無間道之並查集【圖論--並查集】

const lse string turn problem scan -c for sca

傳送門:無間道之並查集

分析

並查集的分析可以看上面的傳送門,寫的挺好的了。
其實在我看來並查集就是一種方便的維護集合的一種技巧,提出了代表元素這一概念。

My AC Code

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=1e5+5;

int represent[maxn];

int find_represent(int x)
{
    if(x == represent[x])
    {
        return x;
    }
    else
    {
        represent[x]=find_represent(represent[x]);
        return represent[x];
    }
    
}
int main()
{
    int n;
    scanf("%d",&n);
    int temp;
    int index=1;
    map<string,int> map_str;
    for(int i=1;i<maxn;i++)
    {
        represent[i]=i;
    }
    for(int i=0;i<n;i++)
    {
        scanf("tmep");
        string sa,sb;
        scanf("%d",&temp);
        cin>>sa>>sb;
        if(map_str[sa]==0)
            map_str[sa]=index++;
        if(map_str[sb]==0)
            map_str[sb]=index++;
        int ia=map_str[sa];
        int ib=map_str[sb];
        
        int ra=find_represent(ia);
        int rb=find_represent(ib);
        if(temp)
        {
            if(ra==rb)
            {
                printf("yes\n");
            }
            else
            {
                printf("no\n");
            }
        }
        else
        {       
            represent[ra]=rb;
        }
        
    }
    return 0;
}

【hiho】14 無間道之並查集【圖論--並查集】