题解 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 ...
随机推荐
- Tomcat和Servlet简析
目录 Servlet Tomcat 参考 Servlet Servlet通常指我们继承了Servlet接口的类,我们开发Servlet时一般就是继承HttpServlet重写它的doGet.doPos ...
- c++中的静态成员
引言 有时候需要类的一些成员与类本身相关联,而不是与类的每个对象相关联.比如类的所有对象都要共享的变量,这个时候我们就要用到类的静态成员. 声明类的静态成员 声明静态成员的方法是使用static关键字 ...
- python -- os处理模块
# --------------------------------# 使用os模块操作目录和文件# --------------------------------# getcwd() 获取当前目录 ...
- python3执行.sql文件
这个脚本主要是遍历执行文件夹下的sql文件,但是没有辨别文件的格式,所以文件夹下只能够放.sql文件,否则会报错哈. 我的sql文件夹与执行的文件平级,所以dir_path就是sql,大家依照自己的路 ...
- Table类
Interpreter类, class Interpreter: public CC_INTERP_ONLY(CppInterpreter) NOT_CC_INTERP(TemplateInterpr ...
- Java 正则表达式 简单用法
正则表达式的具体写法网上有很多了,这里只记录在 Java 中怎么使用. java.util.regex.Matcher.java.util.regex.Pattern 主要有: String.matc ...
- jquery 判断单/复选框是否被选中
1 <div> 2 <span>高亮:</span><input type="checkbox" name="light&quo ...
- 一文彻底弄懂cookie、session、token
前言 作为一个JAVA开发,之前有好几次出去面试,面试官都问我,JAVAWeb掌握的怎么样,我当时就不知道怎么回答,Web,日常开发中用的是什么?今天我们来说说JAVAWeb最应该掌握的三个内容. 发 ...
- 【Logback日志级别】动态调整Logback的日志级别
一.导入 Logback作为目前一个比较流行的日志框架,我们在实际项目经常使用到该框架来帮助我们打印日志,以便我们可以更快速地获取业务逻辑执行情况.定位系统问题. 常用的日志打印一共有5种级别控制,优 ...
- Hadoop 3.1.1 - 概述 - 集群安装
Hadoop 集群安装 目标 本文描述了如何从少数节点到包含上千节点的大规模集群上安装和配置 Hadoop 集群.如果只是为了尝试,你可以先从单台机器上安装开始(参阅单节点安装). 本文并不包含诸如安 ...