题解 Strange Housing
首先想了黑白染色,发现不会染
其实可以考虑如何动态地维护出这个点集
发现题面里对不在点集之中的点之间的连边没有要求
所以考虑不断向图中加点,为了满足要求,每次取一个与当前新图中相连的点
若它与点集中的点有连边,那它不能选入点集
如果没有,那它必须选入点集,否则这个点不满足「通过开启边可达」的要求
但如何证明这样下去得到的点集一定满足「通过开启边可达」的要求呢?
发现加了「开启边」这个要求之后非点集中的点之间的连边就废了
那图就成了二分图了
而我们加边时所加的所有边构成一条链,这条链连通了所有点
得证
或者参考题解做法
Code:
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define N 300010
#define reg register int
#define ll long long
//#define int long long 
char buf[1<<21], *p1=buf, *p2=buf;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf, 1, 1<<21, stdin)), p1==p2?EOF:*p1++)
inline int read() {
	int ans=0, f=1; char c=getchar();
	while (!isdigit(c)) {if (c=='-') f=-f; c=getchar();}
	while (isdigit(c)) {ans=(ans<<3)+(ans<<1)+(c^48); c=getchar();}
	return ans*f;
}
int n, m;
int head[N], size, fa[N], sta[N], top;
bool vis[N], vis2[N];
struct edge{int to, next;}e[N<<1];
inline void add(int s, int t) {edge* k=&e[++size]; k->to=t; k->next=head[s]; head[s]=size;}
inline int find(int p) {return fa[p]==p?p:fa[p]=find(fa[p]);}
void dfs(int u, int pa) {
	vis[u]=1;
	for (int i=head[u]; i; i=e[i].next)
		if (vis2[e[i].to]) goto jump;
	vis2[u]=1;
	sta[++top]=u;
	jump:
	for (int i=head[u]; i; i=e[i].next)
		if (!vis[e[i].to]) dfs(e[i].to, u);
}
signed main()
{
	int T;
	T=read();
	while (T--) {
		size=0; top=0;
		n=read(); m=read();
		memset(head, 0, sizeof(int)*(n+10));
		memset(vis, 0, sizeof(bool)*(n+10));
		memset(vis2, 0, sizeof(bool)*(n+10));
		for (reg i=1; i<=n; ++i) fa[i]=i;
		for (int i=1,u,v; i<=m; ++i) {
			u=read(); v=read();
			add(u, v); add(v, u);
			fa[find(u)]=find(v);
		}
		int u=find(1);
		for (int i=2; i<=n; ++i) if (find(i)!=u) {puts("NO"); goto loop;}
		puts("YES");
		dfs(1, 0);
		printf("%d\n", top);
		for (int i=1; i<=top; ++i) printf("%d ", sta[i]);
		printf("\n");
		loop: ;
	}
	return 0;
}
题解 Strange Housing的更多相关文章
- world.construct(me);
		目录 0 引言 0.1 所谓构造题 0.2 重点是动机 (motivation) 1 实践出真知 1.1 「CSP-S 2021」「洛谷 P7915」回文 1.1.1 题目大意 1.1.2 解题过程 ... 
- Hdoj 1548.A strange lift 题解
		Problem Description There is a strange lift.The lift can stop can at every floor as you want, and th ... 
- POJ2891:Strange Way to Express Integers——题解
		http://poj.org/problem?id=2891 题目大意: k个不同的正整数a1,a2,...,ak.对于一些非负m,满足除以每个ai(1≤i≤k)得到余数ri.求出最小的m. 输入和输 ... 
- HDU 1548 A strange lift 题解
		A strange lift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ... 
- Hdoj 2899.Strange fuction 题解
		Problem Description Now, here is a fuction: F(x) = 6 * x^7+8x^6+7x^3+5x^2-yx (0 <= x <=100) Ca ... 
- CF1506A Strange Table 题解
		Content 给定一个 \(n\times m\) 的矩阵.一开始,\((1,1)\) 所在位置上面的数是 \(1\),随后先由上往下将这一列中的所有位置上面填上 \(2,3,\dots,n\),再 ... 
- CF1455A Strange Functions 题解
		Content 定义一个函数 \(f(x)\) 为 \(x\) 翻转并去掉前导零之后的数,现在有 \(t\) 组询问,每组询问给定一个整数 \(n\),请求出对于所有的 \(1\leqslant x\ ... 
- UVALive 3953	Strange Billboard (状态压缩+枚举)
		Strange Billboard 题目链接: http://acm.hust.edu.cn/vjudge/contest/129733#problem/A Description The marke ... 
- hdoj 2899 Strange fuction【二分求解方程】
		Strange fuction Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ... 
随机推荐
- 官宣.NET 6 预览版4
			我们很高兴发布 .NET 6 Preview 4.我们现在大约完成了 .NET 6 发布的一半.现在是一个很好的时机,可以再次查看.NET6的完整范围.许多功能都接近最终形式,而其他功能将很快推出,因 ... 
- 盘点linux操作系统中的10条性能调优命令,一文搞懂Linux系统调优
			原文链接:猛戳这里 性能调优一直是运维工程师最重要的工作之一,如果您所在的生产环境中遇到了系统响应速度慢,硬盘IO吞吐量异常,数据处理速度低于预期值的情况,又或者如CPU.内存.硬盘.网络等系统资源长 ... 
- QT单进程下载
			QT 同步下载 #include <QNetworkAccessManager> #include <QNetworkRequest> #include <QNet ... 
- vue(19)嵌套路由
			嵌套路由 有时候在路由中,主要的部分是相同的,但是下面可能是不同的.比如访问首页,里面有新闻类的/home/news,还有信息类的/home/message.这时候就需要使用到嵌套路由.项目结构如下: ... 
- [刘阳Java]_步步窥探JS变量作用域
			今天的这个文章题目名称甚是让人会突发异想.JS变量作用域是务必需要搞懂的,单从面试过程就会让面试者烧脑壳.所以,我们还是写一篇关于JS变量作用域的技术专题,让所有小伙伴能够借此文章去整理JS的基础学习 ... 
- SLAM的数学基础(2):协方差和协方差矩阵
			之前我们知道,方差是一组数据的离散程度,它的公式为: 那么如果我们有几组数据,需要知道这几组数据的协同性呢? 举个例子,还是在小红,几次考试成绩如下: 入学考试:数学:80,语文:80 期中考试:数学 ... 
- 【LeetCode】217.存在重复元素
			217. 存在重复元素 知识点:数组:Set: 题目描述 给定一个整数数组,判断是否存在重复元素. 如果存在一值在数组中出现至少两次,函数返回 true .如果数组中每个元素都不相同,则返回 fals ... 
- 【学习笔记】Github的使用
			在github上上传项目代码 在github官网上新建自己的仓库,需要写好标题和说明文件,然后复制自己的仓库地址 在要上传到的本地project中右键, Git bash here,接着输入 git ... 
- Spring总结之SpringMvc上
			一.简介 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架. 二.流程架构 1.用户发送请求至 前端控制器DispatcherServlet ... 
- 【洛谷P4933 大师】动态规划
			题目描述 ljt12138首先建了n个特斯拉电磁塔,这些电塔排成一排,从左到右依次标号为1到n,第i个电塔的高度为h[i]. 建筑大师需要从中选出一些电塔,然后这些电塔就会缩到地下去.这时候,如果留在 ... 
