旅行

标签(空格分隔): noip2018 提高组


今天我给大家带来一份题解。

题目的大大致意思是这样的:

$$ 有一颗 树/基环树 求最小遍历顺序 $$

树的情况自然不必多讲。做一些末端的微处理(将每个点的邻接点排序)即可。

而基环树呢?这是我们就要普及一下基环树的知识了。

\[基环树,简单来讲,就是在一棵树上连一条边,构成一个环。
\]

SO

如何处理??

来,边看代码边讲!

#include<bits/stdc++.h>
using namespace std;
const int maxn = 5e3+5;
int n,m,x,y,dep;
vector <int> e[maxn]; //ling'jie'biao'cun'bian
int tmp[maxn],ans[maxn],cnt,rd[maxn];
bool Tre[maxn],vis[maxn],done[maxn][maxn];
struct edge{
int x,y;
}del;
void dfs(int pos){
if(dep>n)return;
tmp[dep]=pos;vis[pos]=1;
for(int i=0;i<e[pos].size();i++){
int next=e[pos][i];
if((del.x == pos && del.y == next) || (del.x == next && del.y == pos))
continue;
if(!vis[next]){
vis[next]=1;
dep++;
dfs(next);
}
}
}
void top(){
queue<int>q;
for(int i=1;i<=n;i++){
if(rd[i]==1){
Tre[i]=1;
rd[i]--;
q.push(i);
}
}
while(!q.empty()){
int x=q.front();q.pop();
Tre[x]=1;
for(int j=0;j<e[x].size();j++){
int y=e[x][j];
rd[y]--;
if(rd[y]==1){
q.push(y);
}
}
}
return ;
}
bool check(){
for(int i=1;i<=n;i++){
if(ans[i] == tmp[i]){
continue;
}
if(ans[i] < tmp[i]){
return false;
}
if(ans[i] > tmp[i]){
return true;
}
}
}
void update(){
if(ans[1]==0){
for(int i=1;i<=n;i++){
ans[i]=tmp[i];
}
}
else if(check()){
for(int i=1;i<=n;i++){
ans[i]=tmp[i];
}
}
}
void out(){
for(int i=1;i<=n;i++){
printf("%d ",ans[i]);
}
return ;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d",&x,&y);
e[x].push_back(y);rd[y]++;
e[y].push_back(x);rd[x]++;
}
for(int i=1;i<=n;i++){
sort(e[i].begin(),e[i].end());
}
if(m == n-1){
dep = 1;
Tre[1]=true;
dfs(1);
update();
}
else {
top();
for(int i=1;i<=n;i++){
if(!Tre[i]){
for(int j=0;j<e[i].size();j++){
if(!Tre[e[i][j]]){
del.x = i;
del.y = e[i][j];
if(done[del.x][del.y]){
continue;
}
done[del.x][del.y]=done[del.y][del.x]=1;
memset(vis,0,sizeof(vis));
vis[1]=true;dep=1;dfs(1);
update();
}
}
}
}
}
out();
return 0;
}

LGOJ5022 旅行 noip tg 2018的更多相关文章

  1. 开车旅行 [NOIP 2012]

    Description 小A 和小B决定利用假期外出旅行,他们将想去的城市从1到N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i的海拔高度为Hi,城市 i ...

  2. 【NOIP TG 解方程】

    存代码: #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> ...

  3. noip训练 2018.10.22~2018.10.23

    day1 100+100+0=200 T1 稍微比划一下,发现其实就是缩点双,然后区间最小值的和 T2 发现答案为原lis|+1|-1 对每个点做从前最长上升序列以及从后最长下降序列, 想了半个小时怎 ...

  4. [NOIP2018 TG D2T1]旅行

    题目大意:$NOIP\;TG\;D2T1$ 题解:一棵树的很简单,第一个点一定是$1$,只需要对每个节点,找最小的没有访问过的节点访问即可,我写的是$O(n\log_2n)$. 考虑基环树的部分,一个 ...

  5. 历年真题 未完成(Noip 2008 - Noip 2017)

    Noip 2008 :全部 Noip 2009 :全部 Noip 2010 :AK Noip 2011 :AK Noip 2012 : Vigenère 密码,国王游戏,开车旅行 Noip 2013 ...

  6. NOIP赛前集训备忘录(含每日总结)(日更?。。。)

    NOIP赛前集训备忘录(含每日考试总结) 标签: 有用的东西~(≧▽≦)/~啦啦啦 阅读体验:https://zybuluo.com/Junlier/note/1279194 考试每日总结(这个东西是 ...

  7. WC2019 20天训练

    Day -1 2019.1.2 初步计划: 0x60 图论 std 洛谷提高剩余练习 NOIP2018遗留题解 洛谷省选基础练习 数学: 1.数论 2.组合数学(练习:莫比乌斯反演) 3.概率(练习: ...

  8. 【基础练习】【区间DP】codevs1090 加分二叉树题解

    2003 NOIP TG 题目描写叙述 Description 设一个n个节点的二叉树tree的中序遍历为(l,2,3,-,n),当中数字1,2,3,-,n为节点编号.每一个节点都有一个分数(均为正整 ...

  9. CSP2019知识点整理

    也算是接下来二十天的复习计划吧 仅止于联赛难度左右 基础算法 字符串 char[] cstring memset() 输入无& gets(), fgets(stdin, ,); strcmp, ...

随机推荐

  1. ORA-01078: failure in processing system parameters 问题的解决方法(oracle 11g)

    https://blog.csdn.net/lzwgood/article/details/26358725

  2. C2. Pokémon Army (hard version) 解析(思維)

    Codeforce 1420 C2. Pokémon Army (hard version) 解析(思維) 今天我們來看看CF1420C2 題目連結 題目 略,請直接看原題. 前言 根本想不到這個等價 ...

  3. Python爬虫之线程池

    详情点我跳转 关注公众号"轻松学编程"了解更多. 一.为什么要使用线程池? 对于任务数量不断增加的程序,每有一个任务就生成一个线程,最终会导致线程数量的失控,例如,整站爬虫,假设初 ...

  4. js音乐播放器【简洁】

    辞职的第二天没有去找工作还,准备回家. 但到了火车站才发现沃特玛的买的票不是在这个火车站坐. 这就耽误了行程...... 说出来真舒服!!!淦 代码 这里已经上传到码云了,大家可以直接引用. 目前只有 ...

  5. (二)http请求方法和状态码

    1.HTTP请求方法 根据 HTTP 标准,HTTP 请求可以使用多种请求方法. HTTP1.0 定义了三种请求方法: GET.POST 和 HEAD方法. HTTP1.1 新增了六种请求方法:OPT ...

  6. Android操作系统及APP

    1.   Android操作系统 1.1.  介绍 Android操作系统最初由Andy Rubin开发,主要支持手机.2005年8月由Google收购注资.第一部Android智能手机发布于2008 ...

  7. python开发基础(二)运算符以及数据类型之list(列表)

    # encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...

  8. k8s event监控利器kube-eventer对接企微告警

    背景 监控是保障系统稳定性的重要组成部分,在Kubernetes开源生态中,资源类的监控工具与组件监控百花齐放. cAdvisor:kubelet内置的cAdvisor,监控容器资源,如容器cpu.内 ...

  9. JS仿贪吃蛇:一串跟着鼠标的Div

    贪吃蛇是一款80后.90后比较熟悉的经典游戏,下面通过简单的JS代码来实现低仿版贪吃蛇效果:随着鼠标的移动,在页面中呈现所有Div块跟随鼠标依次移动,效果如下图所示. <!DOCTYPE htm ...

  10. mybatis foreach collection

    原文传递:https://blog.csdn.net/qq_24084925/article/details/53790287 foreach元素的属性主要有 item,index,collectio ...