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

題目中,如果按照一般的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. Template msg

    http://blog.csdn.net/xiejiawanwei2_bb/article/details/40680493 {{first.DATA}} 日期:{{Day.DATA}} 报警类型:{ ...

  2. Android可以子线程更新UI?

    初了解Android的时候,就知道Android是不能在子线程更新UI的,不然程序会直接抛出异常,告诉你,别给我在自线程搞事情! 但是,这个是针对普通的view做的限制,而TextureView,Su ...

  3. CentOS7下部署NTP Server

    系统环境:CentOS Linux release 7.4.1708 (Core) 3.10.0-693.el7.x86_64 软件版本:chrony-3.1-2.el7.centos.x86_64 ...

  4. inux中Vi不能高亮显示行号的解决办法

    适用版本:CentOS,RedHat,UBUNTU,Fedora解决办法如下: 在UBUNTU中vim的配置文件存放在/etc/vim目录中,配置文件名为vimrc 在Fedora中vim的配置文件存 ...

  5. loadrunner12-运行报错原因及解决办法整理集合

    1.错误:已超过该load generator的CPU使用率80%: 答:机器内存过小,更换配置更好的机器来执行测试. 是因为虚机的内存过小,运行Controller需要消耗的CPU过高,超过了80% ...

  6. 解压查看二进制rpm包的方法

    详细参考: man cpio 具体方法: rpm2cpio qt5-qtbase-5.6.0-13.fc21.x86_64.rpm | cpio -dium 执行后可在当前目录查看 安装目录  etc ...

  7. OSGi 系列(二)之 Hello World

    OSGi 系列(二)之 Hello World 之前曾介绍过 OSGi 是什么,下面将继续上篇介绍的内容,讲述一个简单的 OSGi Bundle:Hello World 是如何开发的. 在 OSGi ...

  8. Git使用1

    1.先配置本地Git E:\personal>git config –-global user.name "lewy" E:\personal>git config – ...

  9. struts2用到的jar有那些

    struts2.0 lib/antlr-2.7.6.jarlib/struts2-core-2.0.14.jarlib/struts2-spring-plugin-2.0.14.jarlib/free ...

  10. trmd_b1_ok

    # -*- coding:utf-8 -*- ''' 从11c开始提取 ''' import re import numpy as np import os year = '17A' ss=" ...