目測圖論
結果是區間覆蓋
(╯‵□′)╯︵┻━┻
尊重一下你的名字好嗎
因爲美妙的仙人掌的性質
我們可以知道對於任意一個點i
i和i+1一定直接相連
這樣就產生了一條鏈
根據美妙的仙人掌的性質
接下來再選兩條邊u1v1和u2v2的時候
[u1,v1]和[u2,v2]不能有重疊部分
tip:但是可以共用一個點
這樣就變成了選不重疊的區間使區間數量最大
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<vector>
#include<climits>
#include<string>
#include<cstdlib>
#include<ctime>
#define MOD 1000000007
#define LL long long
using namespace std;
struct nico
{
int l,r;
}lin[4000005];
int n,m,i,u,v,tot,p,ans;
bool comp(nico a,nico b)
{
return a.r<b.r;
}
int main()
{
freopen("cactus.in","r",stdin);
freopen("cactus.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d",&u,&v);
if(u>v) swap(u,v);
if(u!=v-1)
{
tot++;
lin[tot].l=u;
lin[tot].r=v;
}
}
sort(lin+1,lin+tot+1,comp);
for(i=1;i<=tot;i++)
if(lin[i].l>=p)
{
p=lin[i].r;
ans++;
}
printf("%d",ans+n-1);
return 0;
}