链接:link.
题意:n个点,m条边,求要满足:如果l能到r,l也要能到l+1,l+2…,r-1至少要增加几条边。
思路:并查集储存当前连通图的最大点.
int n,m;
int f[200010];
int g(int x){return x==f[x]?x:f[x]=g(f[x]);}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++)f[i]=i;
while(m--)
{
int u,v;cin>>u>>v;
int x=g(u);
int y=g(v);
if(x!=y)
{
if(x>y)f[y]=x;
else f[x]=y;
}
}
int ans=0;
int a=g(1);
for(int i=1;i<=n;i++)
{
if(i<=a)
{
int b=g(i);
if(a>b)
{
ans++;
f[b]=a;
}
else if(a<b)
{
ans++;
f[a]=b;
a=b;
}
}
else
{
a=g(i);
}
}
cout<<ans<<"\n";
return 0;
}