并查集

感谢cyanigence-oi大佬(Orz)的题单

模板 见置顶博客

P1551 亲戚

#include 
using namespace std ;
typedef long long ll;
const int maxn = 2e5 + 10;
typedef long long ll;
ll n,m,p;
int a[maxn];
void pre()    //预处理
{
    for(ll i=1;i<=n;i++)
    {
        a[i]=i;
    }
}
ll find(ll k)    //查询+路径压缩
{
    if(a[k]==k) return k;
    else return a[k]=find(a[k]);
}
void merge1(ll u,ll v)    //合并路径
{
    a[find(u)]=find(v);
}
int main()
{
    scanf("%lld%lld%lld",&n,&m,&p);
    pre();
    ll x,y;
    for(ll i=1;i<=m;i++)
    {
        scanf("%lld%lld",&x,&y);
        merge1(x,y);
    }
    for(ll i=1;i<=p;i++)
    {
        scanf("%lld%lld",&x,&y);
        if(find(x)==find(y))
            printf("Yes\n");
        else
            printf("No\n");
    }
}

 

P2814 家谱

  用标准库的map

#include 
using namespace std;
map<string,string>p;
string find(string x)
{
    if(p[x]==x) return x;
    else return p[x]=find(p[x]);
}
int main()
{
    string sss,ss;
    char c;
    while(1)
    {
        scanf("%c",&c);
        if(c=='$')
            break;
        else if(c=='#')
        {
            cin>>ss;
            if(p[ss]=="")
                p[ss]=ss;
        }
        else if(c=='?')
        {
            cin>>sss;
            cout<" "<endl;
        }
        else if(c=='+')
        {
            cin>>sss;
            p[sss]=ss;
        }
    }
}

 

P1536 村村通

 

P1396 营救

 

P1621 集合

 

P4185 [USACO18JAN]MooTube

 

P1197 [JSOI2008]星球大战

 

bzoj2054疯狂的馒头

 

P2294 [HNOI2005]狡猾的商人

 

P1892 [BOI2003]团伙

 

你可能感兴趣的:(并查集)