[noip2005pj] 校門外的樹

題目鏈接

題解:非常奇怪的用並查集維護區間的做法

#include <iostream>
#include <cstdio>
using namespace std;
int r[100000],f[100000];
int find(int x){
    return f[x]==x?x:f[x]=find(f[x]);
}
void uniom(int u,int p){
    int x=find(u),y=find(p);
    if(x==y) return ;
    f[x]=y;
}
int main()
{
    int n,m,sum=0,a,b;
    cin>>n>>m;
    for(int i=0;i<=n;i++)
    f[i]=i;
    while(m--)
    {
        cin>>a>>b;
        for(int i=a;i<=b;i++)
        uniom(i,i+1);
    }
    for(int i=0;i<=n;i++)
    if(i==f[i]) sum++;
    cout<<sum<<endl;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章