究竟是哪里……出了问题……!!
查看原帖
究竟是哪里……出了问题……!!
763992
some_side楼主2023/10/11 19:08
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<vector>
using namespace std;

int n, m, dp[200007], vis[200007], sum;
int mx[200007];
vector<int> G[200007];

int main() {
	scanf("%d%d", &n, &m);
	for(int i=1; i<=m; i++) {
		int a, b; scanf("%d%d", &a, &b);
		G[min(a, b)].push_back(max(a, b));
		mx[a] = max(mx[a], b);
		mx[b] = max(mx[b], a);
	}
	for(int i=0; i<=n; i++) {
		dp[i] = 998244353*2;
	}
	dp[1] = 0; 
	for(int i=1; i<=n; i++) {
		mx[i] = max(mx[i], mx[i-1]); //:D
		dp[i] = min(dp[i], dp[i-1]+1);
		if(!vis[i]) vis[i] = 1, sum++;
		for(int j=0; j<G[i].size(); j++) {
			int v = G[i][j];
			if(!vis[v]) vis[v] = 1, sum++;
		}
		int to = max(mx[i], i+1);
		dp[to] = min(dp[to], dp[i]+to-sum);
	}
	
	cout<<dp[n]<<endl;
	
	return 0;
}

2023/10/11 19:08
加载中...