原題連結
題解
把這裡的數字看成間隔,不要看成點
假設已知能和 \(l\) 組成區間的端點集合 \(A\) 和以 \(r\) 組成區間的端點集合 \(B\),這時候加入一個以 \(l,r\) 為左右端點的區間,那麼在加入區間 \(l,r\) 之後,這兩個集合可以合併
code
#include<bits/stdc++.h>
using namespace std;
int fa[200005];
int finds(int now){return fa[now]==now?now:fa[now]=finds(fa[now]);}
int main()
{
int n,q;
cin>>n>>q;
for(int i=1;i<=n;i++) fa[i]=i;
while(q--)
{
int x,y;
cin>>x>>y;
fa[finds(x-1)]=finds(y);
}
if(finds(0)==finds(n)) puts("Yes");
else puts("No");
return 0;
}