Cycling City CF521E
Cycling City
毒瘤题
首先建dfs树,由于是个无向图所有返祖边都是连向祖先的。
判是否有解其实很简单,只要图不是一个仙人掌就有解了。
仙人掌有关可以看这个博客
但是这道题由于要输出路径成功变成了一个一个顶俩的题。。。。。
通过判仙人掌我们确认了一个点,它连向自己父亲的路径至少被两个边所覆盖。
然后我们可以从这个点开始深搜,找到这两个返祖,注意是返向这个点祖先的路径。
于是有起点就是这两个路径下端的lca,终点就是这两个路径上端点最深的一个(画图很好看出来的)
然后有哪些路径就显然了。。
输出方案毒瘤!
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
using namespace std;
#define MAXN 201116
#define pb push_back
#define pii pair<int,int>
#define mp make_pair
int n , m;
vector<int> G[MAXN];
int dep[MAXN] , par[MAXN] , dir[MAXN];
void dfs( int u , int fa ) {
dep[u] = dep[fa] + 1 , par[u] = fa;
for( int i = 0 ; i < G[u].size( ) ; ++ i ) {
int v = G[u][i];
if( v == fa ) continue;
if( !dep[v] ) dfs( v , u ) , dir[u] += dir[v];
else if( dep[v] < dep[u] )
++ dir[u] , -- dir[ v ];
}
}
int l , r , L , R;
int s;
void dfs2( int u , int fa ) {
for( int i = 0 ; i < G[u].size() ; ++ i ) {
int v = G[u][i];
if( dep[v] == dep[u] + 1 ) dfs2( v , u );
else if( dep[v] < dep[s] && v != fa ) {
if( l ) L = u , R = v;
else l = u , r = v;
}
if( L ) return;
}
}
vector<int> ans , tmp;
void doit( int fr , int to ) {
if( dep[fr] < dep[to] ) {
tmp.clear();
to = par[to];
while( to != fr )
tmp.pb( to ) , to = par[to];
tmp.pb( fr );
for( auto it = tmp.rbegin() ; it != tmp.rend( ) ; ++ it )
ans.pb( *it );
return;
}
while( fr != to )
ans.pb( fr ) , fr = par[fr];
}
int main() {
cin >> n >> m;
for( int i = 1 , u , v ; i <= m ; ++ i ) {
scanf("%d%d",&u,&v);
G[u].pb( v ) , G[v].pb( u );
}
for( int i = 1 ; i <= n ; ++ i ) if( !dep[i] ) dfs( i , 0 );
for( int i = 1 ; i <= n ; ++ i ) if( dir[i] > 1 )
{ s = i; break; }
if( !s ) return puts("NO") , 0;
puts("YES");
dfs2( s , par[s] );
if( dep[R] < dep[r] ) swap( r , R ) , swap( l , L );
int x = l , y = L;
while( x != y ) dep[x] > dep[y] ? x = par[x] : y = par[y];
doit( x , l ) , ans.pb( l ) , doit( r , R ) , ans.pb( R );
printf("%d ",ans.size());
for( auto& x : ans ) printf("%d ",x);
puts("");
ans.clear();
doit( x , L ) , ans.pb( L ) , ans.pb( R );
printf("%d ",ans.size());
for( auto& x : ans ) printf("%d ",x);
puts("");
ans.clear();
doit( x , R ) , ans.pb( R );
printf("%d ",ans.size());
for( auto& x : ans ) printf("%d ",x);
puts("");
}
Cycling City CF521E的更多相关文章
- 「CF521E」 Cycling City
「CF521E」 Cycling City 传送门 首先你能发现这个东西一定是两个环的公共边. 最开始想的是什么如果一个点被访问过三次那它一定是公共边的某一端之类的东西,然后发现被仙人掌叉掉. 然后就 ...
- Codeforces 521 E cycling city
cf的一道题,非常有意思,题目是问图中是否存在两个点,使得这两个点之间有三条路径,而且三条路径没有公共点. 其实就是判断一下是否为仙人掌就行了,如果不是仙人掌的话肯定就存在,题目难在输出路径上,改了半 ...
- [CF]Cycling City
题目大意:给定一张无向图,问图中是否存在两个点,使得这两个点之间有三条路径,而且三条路径没有公共点. 解法: 我们可以先走出来一个环,再出环上任意一点走到另外一点.就像这样:
- Codeforces 521E - Cycling City(点双连通分量+分类讨论)
Codeforces 题面传送门 & 洛谷题面传送门 大家都是暴力找生成树然后跳路径,代码不到 50 行(暴论)的一说--好,那本蒟蒻决定提供一种代码 150 行,但复杂度也是线性的分类讨论做 ...
- URAL 1966 Cycling Roads 点在线段上、线段是否相交、并查集
F - Cycling Roads Description When Vova was in Shenzhen, he rented a bike and spent most of the ...
- Ural 1966 Cycling Roads
================ Cycling Roads ================ Description When Vova was in Shenzhen, he rented a ...
- URAL 1966 Cycling Roads 计算几何
Cycling Roads 题目连接: http://acm.hust.edu.cn/vjudge/contest/123332#problem/F Description When Vova was ...
- BZOJ 2001: [Hnoi2010]City 城市建设
2001: [Hnoi2010]City 城市建设 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1132 Solved: 555[Submit][ ...
- History lives on in this distinguished Polish city II 2017/1/5
原文 Some fresh air After your time underground,you can return to ground level or maybe even a little ...
随机推荐
- Succeed_School
# Author kevin_hou class School(object): def __init__(self,name,addr): self.name = name self.addr = ...
- Alpha阶段初始任务分配
项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 团队项目-计划-Alpha阶段说明书 一.Alpha阶段总体规划 进行服务器相关部署 进行开发相关技术学习 ...
- makedown笔记
makedown语法 表格 这个表格的主题 |姓名|性别|年龄|职业| | ----- | ----- | ----- | ----- | |张三|男|34|码农| |李四|男|27|代驾| 这个表格 ...
- CF #749
A 题意 有个长度为n的序列, 每个数互不相同, 求总和最大的最长子序列, 并输出每个i: 题解 emmmmmm, 刚开始看到这个数据和题解被迷惑了, 以为有什么顺序, 并且一直在想一些复杂度较高的算 ...
- 痞子衡嵌入式:借助Serial Plot软件测量i.MXRT系列FlexSPI驱动Flash页编程执行时间
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT系列FlexSPI驱动Flash页编程执行时间. 痞子衡之前写过一篇文章 <串行NOR Flash的页编程模式对于量产 ...
- Iptables 代理局域网内的主机上网
参考连接:https://developer.aliyun.com/article/607330 环境为云环境,有外网主机的IP为192.168.0.39,无外网主机的IP为192.168.0.228 ...
- systemd-nspawn以及container的学习
container的分类 目前container可以分为两大类,一类是Privileged container,一类是Unprivileged container. Privileged contai ...
- 重磅|Apache ShardingSphere 5.0.0 即将正式发布
Apache ShardingSphere 5.0.0 GA 版在经历 5.0.0-alpha 及 5.0.0-beta 接近两年时间的研发和打磨,终于将在 11 月份与大家正式见面! 11 月 10 ...
- 解决tomcat的404问题
遇到的问题 点击startup.bat启动tomcat启动成功,但在网页上输入local:8080却显示Access Error: 404 -- Not Found Cannot locate doc ...
- Linux下Zabbix5.0 LTS添加MySQL监控,实现邮件报警并执行预处理操作
依据前文:Linux下Zabbix5.0 LTS监控基础原理及安装部署(图文教程) 环境,继续添加MySQL应用集. 第一部分:添加Zabbix自带的MySQL应用集. 在ZabbixClient-0 ...