【CodeForces - 190E】Counter Attack (补图bfs,卡常,dsu)

题干:

无向图中给定n个顶点,m条不存在的边(除了这m条边,其余都存在),求图的连通分量,及每个连通分量的大小。

解题报告:

https://codeforces.com/blog/entry/4556

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<unordered_map>
#include<string>
#include<cmath>
#include<cstring>
#define F first
#define S second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 5e5 + 5;
unordered_map<int,bool> mp[MAX];
vector<int> vv;
vector<vector<int> > ans;
vector<int> bfs(int x) {
	vector<int> res;
	queue<int> q;
	q.push(x);
	while(q.size()) {
		int cur = q.front();q.pop();
		res.pb(cur);
//		int up = vv.size();这里不能这样写,因为size是动态的。
		for(int i = 0; i<(int)vv.size(); i++) {
			int v = vv[i];
			if(mp[cur].count(v) == 0) {
				swap(vv[i],vv.back());//用来实现set的erase操作,减少常数。 
				vv.pop_back();//用来实现set的erase操作 
				i--;
				q.push(v);
			}
		}
	}
	return res;
}
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i = 1; i<=n; i++) vv.pb(i);
	for(int x,y,i = 1; i<=m; i++) {
		scanf("%d%d",&x,&y);
		mp[x][y]=1;
		mp[y][x]=1;
	}
	while(!vv.empty()) {
		int v = vv.back();vv.pop_back();
		vector<int> cnt = bfs(v);
		ans.push_back(cnt);
	}
	sort(ans.begin(),ans.end());
	printf("%d\n",ans.size());
	for(int i = 0; i<(int)ans.size(); i++) {
		printf("%d ",ans[i].size());
		for(int j = 0; j<(int)ans[i].size(); j++) {
			printf("%d ",ans[i][j]);
		}
		printf("\n");
	}

	return 0 ;
}

 

全部评论

相关推荐

点赞 评论 收藏
分享
繁华的街道两旁,湿漉漉的下午,两个青涩的脸庞互相张望。宽大卫衣下娇小的她,向我奔来。不约而同的卫衣,斯文的半框眼镜掩饰着一个穷臭屌丝气息。这是我和我牛爱网第一死忠粉兼专属女嘉宾最初的见面。火速恋爱,但是没有所谓的快节奏,相识半年,还是一样的热恋。吃着肉夹馍坐过西安的小三轮洱海边自行车的气球胖吃着她最喜欢的酸酸水果和小乳扇在南山某店爷爷穿孙子衣服,摸肥猫就算我在忙也要抽出时间陪她去吃他喜欢的漂亮饭生活总是平凡,但平凡不平淡还记得见面第一件事儿:“我去上个厕所。”现在早上第一件事儿:“拉*”第一次上我车的她:“我可以坐副驾吗?”现在的她:“老子把jio翘到上面得得挡到你后视镜。”这小孩,虽然花了我...
Stan_蹒跚者:确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务