求助MLE是出了什么锅
查看原帖
求助MLE是出了什么锅
247695
AuroraKelsey楼主2020/10/14 08:35
#include <queue>
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;
typedef long long ll;
const int N=2e6+10;
//const int M=;
inline int read() {
	int x=0;char ch=getchar();
	while(ch<'0'||ch>'9')ch=getchar();
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x;
}
int n,m;
vector<int>G[N];
vector<int>v[N];
queue<int>q;
int st[N],tp;
bool vis[N];
void bfs(int x) {
	int siz=1;
	q.push(x);
	vis[x]=1;
	while(q.size()) {
		int x=q.front();
		q.pop();
		for(auto y:G[x]) {
			if(vis[y]) continue;
			vis[y]=1;
			q.push(y);
			siz++;
		}
	}
	st[++tp]=siz;
}
int main() {
	n=read();m=read();
	for(int i=1,a,b;i<=m;i++) {
		a=read();b=read();
		v[a].push_back(b);
		v[b].push_back(a);
	}
	for(int i=1;i<=n;i++) {
		int h=1;
		v[i].push_back(i);
		sort(v[i].begin(),v[i].end());
		for(auto x:v[i]) {
			while(h<x) {
				G[i].push_back(h);
				h++;
			}
			h++;
		}
		while(h<=n) {
			G[i].push_back(h);
			h++;
		}
	}
	for(int i=1;i<=n;i++)
		if(!vis[i])	bfs(i);
	sort(st+1,st+1+tp);
	printf("%d\n",tp);
	for(int i=1;i<=tp;i++)
		printf("%d ",st[i]);
	return 0;
}



2020/10/14 08:35
加载中...