這玩意嚴格意義上算是水法(因為可能會被卡)

題目中,如果按照一般的bfs來搜索,那麼有平方級邊,會tle

如果按照補邊的線性來搜索,那麼時間複雜度變為min(k*k,m)*n,視n,m同階,則時間複雜度為nsqrt(n)

接下來需要設計一個和補邊數相關的算法

維護3個隊列,q1,q2,q3。q1代表待擴展節點列表,q2代表已經擴展節點列表,q3代表不能擴展節點列表

每次從q1中取出一個u,然後放進q2,然後聯通塊數目+1

再當q2非空時,從中取出一個v,嘗試用v擴展所有q1中的節點。當其與q1中的當前節點沒有邊,則將其放入q3,否則放入q2

最後,將q3所有節點放入q1

用哈希判斷邊是否存在

有可能會被卡,但是出題人顯然沒有卡

代碼:

#include<bits/stdc++.h>
using namespace std;
#define jzm 1000007
#pragma GCC optimize("O3")
int n,m,q;
set<int>s[100010];
int main(){
	//freopen("connect.in","r",stdin);
	//freopen("connect.out","w",stdout);
	scanf("%d%d%d",&n,&m,&q);
	while(m--){
		int x,y;
		scanf("%d%d",&x,&y);
		s[x].insert(y);
		s[y].insert(x);
	}
	while(q--){
		int t,x,ct=0;
		scanf("%d",&t);
		queue<int>q1,q2,q3;
		for(int i=1;i<=t;i++){
			scanf("%d",&x);
			q1.push(x);
		}
		while(!q1.empty()){
			int x=q1.front();q1.pop();
			ct++;q2.push(x);
			while(!q2.empty()){
				int z=q2.front();q2.pop();
				while(!q1.empty()){
					int y=q1.front();q1.pop();
					if(s[z].count(y))q3.push(y);
					else q2.push(y);
				}
				while(!q3.empty()){
					int y=q3.front();q3.pop();
					q1.push(y);
				}
			}
		}
		printf("%d\n",ct);
	}
}

jzoj5875的更多相关文章

随机推荐

  1. 绘制3D的js库

      有哪些值得推荐的绘制3D的js库?   4 个回答 默认排序​ 草皮子 HTML5/GAME 4 人赞同了该回答 只用过three.js,所以推荐这个.不清楚你打算用来做什么,总的来说,得看你的运 ...

  2. Linux dkpg命令

    一.简介 dpkg 是Debian Package 的简写,是Debian系列系统下的一个软件安装.更新及移除工具. 二.常用指令 1.查询功能 查看软件包信息: dpkg -info xxx.deb ...

  3. Mysql的内存优化

     老师  vi mysqld_safe# executing mysqld_safe 后面增加export LD_PRELOAD=/usr/local/lib/libtcmalloc.so  可以做一 ...

  4. Laravel 日期时间处理包 Carbon 的应用

    在编写 PHP 应用时经常需要处理日期和时间,这篇文章带你了解一下 Carbon – 继承自 PHP DateTime 类的 API 扩展,它使得处理日期和时间更加简单.Laravel 中默认使用的时 ...

  5. 10 Maven 版本管理

    Maven 版本管理 一个健康的项目通常有一个长期.合理的版本演变过程.例如 Maven 本身的版本也比较多,如最早的 Maven1:Maven2 有 2.0.9.2.0.10.2.1.0.2.2.0 ...

  6. hdu-1116(欧拉回路+并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1116 思路:将字符串的头元素和尾元素视为图的x,y节点,然后合并x,y. 如果这个图不连通,则门不能打 ...

  7. flask_模板

    由于python中生成html比较繁琐,所以flask自动为你配置好jinjia2模板.下面我们开始学习模板应用吧~ 1.编写microblog模块 注:(1)这里为了渲染模板,我们从Flask导入了 ...

  8. python小练习--函数调用函数,让对象具有能动性

    class Box:#定义一个类名为Box,类名后不必有括号,类包含类属性和类方法,这个类没有定义类属性 '''这是一个计算体积的类'''#这是这个类的__doc__属性,执行类后就可以在交互界面输入 ...

  9. 61 origin授控于MATLAB

    官方教程:http://www.originlab.com/forum/topic.asp?TOPIC_ID=22339 学习自白东升老师originPRO8.0教程. 我用的是origin pro2 ...

  10. 给Notepad++换主题

    Notepad++是一款不错的编辑器,很轻巧,我很喜欢它.再换个主题,加个代码高亮,看上去就更专业了.如果你是Mac用户,应该听说或使用过Textmate(什么?没听过,那你该补课了!),Textma ...