ICPC-day2(圆方树)

圆方树 - OI Wiki (oi-wiki.org)

F-Fief_"蔚来杯"2022牛客暑期多校训练营3(重现赛)@山川四月 (nowcoder.com)

题目大意:给定一个无向图,每次询问两点x, y,求是否存在一个n的排列,使得第一个元素为x,最后一个元素为y,且排列的任意一个前缀、任意一个后缀都连通。

其实就是求这两个点是否存在两个不相同的路径,同时两者路径的交集是n

可以用圆方树缩点将其变成一颗树,再判断这颗树是否是一条链,x,y是否在这条链的两侧

using namespace std;
#define int long long//__int128 2^127-1(GCC)
#define PII pair<int,int>
const int inf = 0x3f3f3f3f3f3f3f3f, N = 100000 + 5, mod = 1e9 + 7, M = 200000 + 5;
int cnt;
vector<int>G[N], T[N * 2];
int stk[N], tp;
int dfn[N], low[N], dfc;
void Tarjan(int u) {//printf("  Enter : #%lld\n", u);low[u] = dfn[u] = ++dfc;                // low 初始化为当前节点 dfnstk[++tp] = u;                          // 加入栈中for (int v : G[u]) {                    // 遍历 u 的相邻节点if (!dfn[v]) {                        // 如果未访问过Tarjan(v);                          // 递归low[u] = std::min(low[u], low[v]);  // 未访问的和 low 取 minif (low[v] == dfn[u]) {  // 标志着找到一个以 u 为根的点双连通分量++cnt;                 // 增加方点个数//printf("  Found a New BCC #%lld.\n", cnt - n);// 将点双中除了 u 的点退栈,并在圆方树中连边for (int x = 0; x != v; --tp) {x = stk[tp];T[cnt].push_back(x);T[x].push_back(cnt);//printf("    BCC #%lld has vertex #%lld\n", cnt - n, x);}// 注意 u 自身也要连边(但不退栈)T[cnt].push_back(u);T[u].push_back(cnt);//printf("    BCC #%lld has vertex #%lld\n", cnt - n, u);}}elselow[u] = std::min(low[u], dfn[v]);  // 已访问的和 dfn 取 min}//printf("  Exit : #%lld : low = %lld\n", u, low[u]);//printf("  Stack:\n    ");//for (int i = 1; i <= tp; ++i) printf("%lld, ", stk[i]);//puts("");
}
signed main()
{ios_base::sync_with_stdio(0); cin.tie(0), cout.tie(0);int n, m;cin >> n >> m;cnt = n;while (m--) {int u, v;cin >> u >> v;G[u].push_back(v);G[v].push_back(u);}int ok = 0;for (int u = 1; u <= n; ++u)if (!dfn[u]) Tarjan(u), --tp, ok++;vector<int>dep(cnt + 1);int tot_num = 0;for (int i = n + 1; i <= cnt; i++) {int num = 0;for (auto w : T[i]) {if (T[w].size() == 1) continue;num++;}if (num == 1 || num == 0) {queue<int>que;que.push(i);dep[i] = 1;while (que.size()) {auto t = que.front();tot_num++;que.pop();for (auto w : T[t]) {if (T[w].size() == 1) continue;if (dep[w]) continue;dep[w] = dep[t] + 1;que.push(w);}}break;}}vector<int>flag(n + 1);for (int i = 1; i <= n; i++) {if (T[i].size() == 1) {if (dep[T[i][0]] == 1) {flag[i] = 1;}if (dep[T[i][0]] == tot_num) {flag[i] = tot_num;}}}int Q;cin >> Q;while (Q--) {int u, v;cin >> u >> v;if (ok != 1) {cout << "NO\n";}else if (flag[u] == 1 && flag[v] == tot_num) {cout << "YES\n";}else if (flag[v] == 1 && flag[u] == tot_num) {cout << "YES\n";}else {cout << "NO\n";}}
}//8 9
//1 2
//1 3
//2 4
//3 4
//4 5
//4 6
//5 7
//6 7
//7 8

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/55812.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录 103. 水流问题

103. 水流问题 #include<bits/stdc.h> using namespace std;void dfs(vector<vector<int>>& mp, vector<vector<int>>& visit, int y, int x){if (visit[y][x] 1) return;visit[y][x] 1;if (y > 0){if (mp[y][x] < mp[y - 1][x…

计算机网络——http和web

无状态服务器——不维护客户端 怎么变成有状态连接 所以此时本地建立代理—— 若本地缓存了——但是服务器变了——怎么办&#xff1f;

vue 不是spa 单页面应用吗? 配置路由工作模式为history 后 ,为什么配置Nginx的 try_files 可以根据url 找到对应的文件?

免责申明 记录用&#xff0c;本人主要是后端,可能理解有误 Vue.js 是一个前端框架&#xff0c;主要用于构建单页面应用程序&#xff08;SPA&#xff09;。然而&#xff0c;Nginx 是一个服务器端的应用程序&#xff0c;负责处理 HTTP 请求并返回相应的资源。 当在 Vue.js 应用…

Pikachu-File Inclusion-远程文件包含

远程文件包含漏洞 是指能够包含远程服务器上的文件并执行。由于远程服务器的文件是我们可控的&#xff0c;因此漏洞一旦存在&#xff0c;危害性会很大。但远程文件包含漏洞的利用条件较为苛刻&#xff1b;因此&#xff0c;在web应用系统的功能设计上尽量不要让前端用户直接传变…

用java编写飞机大战

游戏界面使用JFrame和JPanel构建。背景图通过BG类绘制。英雄机和敌机在界面上显示并移动。子弹从英雄机发射并在屏幕上移动。游戏有四种状态&#xff1a;READY、RUNNING、PAUSE、GAMEOVER。状态通过鼠标点击进行切换&#xff1a;点击开始游戏&#xff08;从READY变为RUNNING&am…

深入理解C语言中的内存分配函数:malloc、calloc、realloc

目录&#xff1a; 前言1. malloc&#xff1a;分配内存块2. calloc&#xff1a;分配并初始化内存块3. realloc&#xff1a;重新分配内存块总结 前言 在C语言编程中&#xff0c;动态内存分配是一个非常重要的概念。它允许我们在程序运行时根据需要分配和释放内存&#xff0c;从而…

CSS | 响应式布局之媒体查询(media-query)详解

media type(媒体类型)是CSS 2中的一个非常有用的属性&#xff0c;通过media type我们可以对不同的设备指定特定的样式&#xff0c;从而实现更丰富的界面。media query(媒体查询)是对media type的一种增强&#xff0c;是CSS 3的重要内容之一。随着移动互联网的发展&#xff0c;m…

微信小程序中的 `<block>` 元素:高效渲染与结构清晰的利器

微信小程序中的 <block> 元素&#xff1a;高效渲染与结构清晰的利器 在微信小程序的开发中&#xff0c;<block> 元素扮演着举足轻重的角色。尽管它不会在页面中渲染任何可见的节点&#xff0c;但作为一个逻辑上的容器&#xff0c;<block> 在条件渲染和循环渲…

reactNative本地调试localhost踩坑

本地调试请求localhost的时候 1.要和电脑处在同一局域网下面&#xff08;同一个wifi&#xff09; 2.把baseURL的localhost改成命令行中ipconfig查询到的IPv4 地址 . . . . . . . . . . . . : &#xff08;例如&#xff09;192.168.1.103 如果报错Net Work Error&#xff0c;可…

C语言普及难度三题

先热个身&#xff0c;一个长度为10的整型数组&#xff0c;输出元素的差的max和min。 #include<stdio.h> int main() {int m[10],i0,max,min;for(i0;i<10;i){scanf("%d",&m[i]);}minm[0];maxm[0];for (i 0; i <10; i){if(min>m[i]) min m[i];i…

BMC pam认证的使用

1.说明 1.1 文档参考资料 https://www.chiark.greenend.org.uk/doc/libpam-doc/html/Linux-PAM_ADG.htmlhttp://www.fifi.org/doc/libpam-doc/html/pam_appl-3.htmlpdf文档: https://fossies.org/linux/Linux-PAM-docs/doc/adg/Linux-PAM_ADG.pdflinux-pam 中文文档pam 旧文p…

Redis基础二(spring整合redis)

Springboot整合Redis 一、Springboot整合redis ​ redis可以通过使用java代码来实现 第一部分文档中 在终端操作redis的所有命令&#xff0c;Spring已经帮我们封装了所有的操作&#xff0c;所以变得很简单了。 ​ Spring专门提供了一个模块来进行这些操作的封装&#xff0c;这…

【Linux】详解Linux下的工具(内含yum指令和vim指令)

文章目录 前言1. Linux下软件安装的方式2. yum2.1 软件下载的小知识2.2 在自己的Linux系统下验证yum源的存在2.3 利用yum指令下载软件2.4 拓展yum源&#xff08;针对于虚拟机用户&#xff09; 3. vim编辑器3.1 vim是什么&#xff1f;3.2 如何打开vim3.2 vim各模式下的讲解3.2.1…

Oracle中ADD_MONTHS()函数详解

文章目录 前言一、ADD_MONTHS()的语法二、主要用途三、测试用例总结 前言 在Oracle数据库中&#xff0c;ADD_MONTHS()函数用于在日期中添加指定的月数。 一、ADD_MONTHS()的语法 ADD_MONTHS(date, n) 其中&#xff0c;date是一个日期值&#xff0c;n是一个整数值&#xff0c…

基于vue框架的大学生学业预警系统设计与实现53ify(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;学生,公告信息,成绩信息,科目,学分信息,考勤信息,教师 开题报告内容 基于Vue框架的大学生学业预警系统设计与实现开题报告 一、研究背景与意义 随着高等教育的普及与深入&#xff0c;大学生群体规模日益扩大&#xff0c;其学业管理成…

百元头戴式耳机哪款口碑爆棚+质价比高?2024耳机最强推荐攻略!

在2024年的耳机市场中&#xff0c;百元头戴式耳机凭借其亲民的价格和出色的性能&#xff0c;成为了众多消费者的首选。随着技术的不断进步&#xff0c;这一价位段的耳机不仅在音质上有了显著提升&#xff0c;还在舒适度、降噪能力以及续航时间等方面表现出色。那百元头戴式耳机…

CAN XL协议标准在CANoe中的应用

众所周知&#xff0c;CAN通信技术在汽车领域中&#xff0c;有着非常广泛的应用。从1991年&#xff0c;第一代经典CAN在奔驰S级轿车中首次应用&#xff1b;到2011年&#xff0c;开始第二代CAN总线&#xff08;即CAN FD&#xff09;的开发&#xff1b;如今&#xff0c;ISO 11898-…

MyBatis 操作数据库入门

目录 前言 1.创建springboot⼯程 2.数据准备 3.配置Mybatis数据库连接信息 4.编写SQL语句&#xff0c;进行测试 前言 什么是MyBatis? MyBatis是⼀款优秀的 持久层 框架&#xff0c;⽤于简化JDBC的开发 Mybatis操作数据库的入门步骤&#xff1a; 1.创建springboot⼯程 2.数…

kwin- 插件加载绘制流程

1. 配置文件的作用具体是做什么的&#xff1f; 相当于用户强制设置了特效的开关&#xff0c;对于没有写在配置文件里的特效&#xff0c;会检测默认加载值&#xff0c;确定是否加载。写在了文件里的会根据返回的值&#xff0c;来加载特效。 2. 为什么配置文件没有写&#xff0c…

【自用】王道文件管理强化笔记

文章目录 操作系统引导:磁盘初始化文件打开过程角度1文件的打开过程角度2 内存映射的文件访问 操作系统引导: ①CPU从一个特定主存地址开始&#xff0c;取指令&#xff0c;执行ROM中的引导程序(先进行硬件自检&#xff0c;再开机) ②)将磁盘的第一块–主引导记录读入内存&…