做法

把环找出来,如果在环上(u,v)两点的时候,u的其他子树都走完了,v上第一个还有除v存在的子树没走完的 祖先,祖先的最小子节点小于v,则回去

Code

#include<bits/stdc++.h>
typedef int LL;
const LL maxn=1e6+9,inf=0x3f3f3f3f;
inline LL Read(){
LL x(0),f(1); char c=getchar();
while(c<'0' || c>'9'){
if(c=='-') f=-1; c=getchar();
}
while(c>='0' && c<='9'){
x=(x<<3)+(x<<1)+c-'0'; c=getchar();
}return x*f;
}
struct node{
LL to,nxt;
}dis[maxn<<1];
LL n,m,num,top,op;
LL head[maxn],visit[maxn],vis[maxn],sta[maxn],ans[maxn],size[maxn];
std::vector<LL> G[maxn];
inline void Add(LL u,LL v){
dis[++num]=(node){v,head[u]}; head[u]=num;
}
LL Dfs1(LL u,LL fa){
visit[u]=true; sta[++top]=u;
for(LL i=0;i<G[u].size();++i){
LL v(G[u][i]); if(v==fa) continue;
if(visit[v]){
LL nw; //printf("%d\n",u);
do{
nw=sta[top--]; vis[nw]=1;
}while(nw!=v);
return true;
}
if(Dfs1(v,u)) return true;
}
--top;
return false;
}
void Dfs2(LL u,LL mi){
visit[u]=1; ans[++top]=u; LL tmp(inf);
if(vis[u] && !op){
LL i(0);
for(;i<G[u].size();++i){
if(visit[G[u][i]]) continue;
if(vis[G[u][i]]) break;
}
for(++i;i<G[u].size();++i){
if(visit[G[u][i]]) continue;
tmp=std::min(tmp,G[u][i]);
}
}
if(tmp==inf) tmp=mi;
for(LL i=0;i<G[u].size();++i){
LL v(G[u][i]); if(visit[v]) continue;
if(!op && vis[u] && vis[v] && v>tmp){
op=1; continue;
}
Dfs2(v,tmp);
}
}
int main(){
n=Read(); m=Read();
for(LL i=1;i<=m;++i){
LL u(Read()),v(Read());
G[u].push_back(v); G[v].push_back(u);
}
for(LL i=1;i<=n;++i) std::sort(G[i].begin(),G[i].end());
Dfs1(1,0);
memset(visit,0,sizeof(visit)); top=0;
Dfs2(1,inf);
for(LL i=1;i<=n;++i) printf("%d ",ans[i]);
return 0;
}

P5049 旅行(数据加强版)(基环树)的更多相关文章

  1. bzoj 2594: [Wc2006]水管局长数据加强版 动态树

    2594: [Wc2006]水管局长数据加强版 Time Limit: 25 Sec  Memory Limit: 128 MBSubmit: 934  Solved: 291[Submit][Sta ...

  2. 洛谷P5022&P5049 旅行(及其数据加强版)

    旅行(不是加强版) 加强版 加强版数据范围: 我们注意到 也就是说要么是个树,要么是个基环树 60pts 这60分是个树,可以简单的贪心想到每次都走子树中编号最小的那个,并且把1作为根 dfs练手题 ...

  3. 【洛谷P5049】旅行(数据加强版)

    题目链接 m=n-1是直接按字典序dfs就行, m=n时是一棵基环树,我们发现当一个点在环上时,可以把它和它的一个在环上的儿子之间的边删掉,然后回溯,到达它的第一个有其他儿子的祖先的另一个儿子上,我们 ...

  4. P5022 旅行[基环树]

    以后必须学会面向数据编程!看半天题目不知道咋写直接爆搜,结果分少的可怜,还不如直接贪搞个60分. 观察数据,发现图至多存在一个环. 显然,如果没有环,这个题不跟你多bb,直接贪就完事了,线性复杂度. ...

  5. 【BZOJ1791】【IOI2008】【基环树】island(status第一速度)

      1791: [Ioi2008]Island 岛屿  Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 908  Solved: 159 [Su ...

  6. bzoj1040 基环树森林dp

    https://www.lydsy.com/JudgeOnline/problem.php?id=1040 Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社 ...

  7. 与图论的邂逅01:树的直径&基环树&单调队列

    树的直径 定义:树中最远的两个节点之间的距离被称为树的直径.  怎么求呢?有两种官方的算法(不要问官方指谁我也不晓得): 1.两次搜索.首先任选一个点,从它开始搜索,找到离它最远的节点x.然后从x开始 ...

  8. D4 树的直径、重心以及基环树

    第一题第二题鉴上我前几篇博客poj1985 poj1849:https://www.cnblogs.com/Tyouchie/p/10384379.html 第三题:数的重心:poj1655 来自sj ...

  9. 「BZOJ 3242」「NOI 2013」快餐店「基环树」

    题意 基环树上找到一个点(可以在边上)使得它到树上最远点的距离最小,输出最小距离 题解 如果是一棵树,答案就是树的直径\(/2\) 如果是基环树,那么很好证明删去环上的某一条边是不影响答案的.于是断环 ...

  10. 贞鱼传教&&贞鱼传教(数据加强版)

    http://acm.buaa.edu.cn/problem/1381/ 贞鱼传教[问题描述] 新的一年到来了,贞鱼哥决定到世界各地传授“贞教”,他想让“贞教”在2016年成为世界第四大宗教.说干就干 ...

随机推荐

  1. ubuntu 迅雷 XwareDesktop

    Xinkai/XwareDesktop Ubuntu上编译安装说明 Home    Ubuntu上编译安装说明    使用说明    升级到0.12    升级到0.9    发行版支持情况    名 ...

  2. java第四次面试总结

    该公司没有笔试,直接就进行了面试,然后我就拿着我的简历瑟瑟发抖...... 1.因为是看简历来面试,所以面试官从我的项目下手,而我的项目都是后端的东西,虽然学过一些前端,但是项目里并没有用到任何jav ...

  3. 5_PHP数组_3_数组处理函数及其应用_7_数组排列函数

    以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. 数组排列函数 1. sort() 函数 程序: <?php $array = array("img ...

  4. cookie遇到java.lang.IllegalArgumentException: Control character in cookie value or attribute

    java.lang.IllegalArgumentException: Control character in cookie value or attribute. 该异常说明cookie中的val ...

  5. WPF登录功能,对于密码框的操作,其实WPF有个PasswordBox专门的密码框控件,完全可以选择自己要显示的密码符号。

    在链接数据库后,点击登录时需要判断用户名和密码框是否为空,而PasswordBox不像textbox那样判断 textbox判断文本框为空 if (this.UserName.Text.Trim()= ...

  6. EasyUI DataGrid 根据ID选中行(转载)

      转载来源: https://blog.csdn.net/chq00788/article/details/51505519 function selectRows(){ //获取需要选中的记录ID ...

  7. Nacos Docker集群部署

    参考文档:https://nacos.io/zh-cn/docs/quick-start-docker.html 1.从git上下载nacos-docker项目,本地目录为/docksoft/naco ...

  8. 【转】TCP之深入浅出send和recv

    本篇我们用一个测试机上的阻塞socket实例来说明主题.文章中所有图都是在测试系统上现截取的. 需要理解的3个概念 1. TCP socket的buffer 每个TCP socket在内核中都有一个发 ...

  9. 分布式结构化存储系统-HBase应用案例

    分布式结构化存储系统-HBase应用案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 为了让读者更进一步了解HBase在实际生成环境中的应用方法,在董西成的书里介绍两个经典的HB ...

  10. IDEA 使用教程(破解2019.1.1)

    2019-08-02更新 最新破解方法: ZKVVPH4MIO-eyJsaWNlbnNlSWQiOiJaS1ZWUEg0TUlPIiwibGljZW5zZWVOYW1lIjoi5o6I5p2D5Luj ...