LGOJ5022 旅行 noip tg 2018
旅行
标签(空格分隔): 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的更多相关文章
- 开车旅行 [NOIP 2012]
Description 小A 和小B决定利用假期外出旅行,他们将想去的城市从1到N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i的海拔高度为Hi,城市 i ...
- 【NOIP TG 解方程】
存代码: #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> ...
- noip训练 2018.10.22~2018.10.23
day1 100+100+0=200 T1 稍微比划一下,发现其实就是缩点双,然后区间最小值的和 T2 发现答案为原lis|+1|-1 对每个点做从前最长上升序列以及从后最长下降序列, 想了半个小时怎 ...
- [NOIP2018 TG D2T1]旅行
题目大意:$NOIP\;TG\;D2T1$ 题解:一棵树的很简单,第一个点一定是$1$,只需要对每个节点,找最小的没有访问过的节点访问即可,我写的是$O(n\log_2n)$. 考虑基环树的部分,一个 ...
- 历年真题 未完成(Noip 2008 - Noip 2017)
Noip 2008 :全部 Noip 2009 :全部 Noip 2010 :AK Noip 2011 :AK Noip 2012 : Vigenère 密码,国王游戏,开车旅行 Noip 2013 ...
- NOIP赛前集训备忘录(含每日总结)(日更?。。。)
NOIP赛前集训备忘录(含每日考试总结) 标签: 有用的东西~(≧▽≦)/~啦啦啦 阅读体验:https://zybuluo.com/Junlier/note/1279194 考试每日总结(这个东西是 ...
- WC2019 20天训练
Day -1 2019.1.2 初步计划: 0x60 图论 std 洛谷提高剩余练习 NOIP2018遗留题解 洛谷省选基础练习 数学: 1.数论 2.组合数学(练习:莫比乌斯反演) 3.概率(练习: ...
- 【基础练习】【区间DP】codevs1090 加分二叉树题解
2003 NOIP TG 题目描写叙述 Description 设一个n个节点的二叉树tree的中序遍历为(l,2,3,-,n),当中数字1,2,3,-,n为节点编号.每一个节点都有一个分数(均为正整 ...
- CSP2019知识点整理
也算是接下来二十天的复习计划吧 仅止于联赛难度左右 基础算法 字符串 char[] cstring memset() 输入无& gets(), fgets(stdin, ,); strcmp, ...
随机推荐
- 想买保时捷的运维李先生学Java性能之 垃圾收集器
前言 垃圾收集算法是内存回收的方法论:垃圾收集器是内存回收的具体实现.Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商.不同版本的虚拟机所提供的垃圾收集器都有很大的差别,并且 ...
- Java学习的第三十七天
1.例3.1求一元二次方程的根 import java.util.Scanner; public class cjava { public static void main(String[]args) ...
- [Luogu P3455] [POI2007]ZAP-Queries (莫比乌斯反演 )
题面 传送门:洛咕 Solution 这题比这题不懂简单到哪里去了 好吧,我们来颓柿子. 为了防止重名,以下所有柿子中的\(x\)既是题目中的\(d\) 为了方便讨论,以下柿子均假设\(b>=a ...
- Java并发队列与容器
[前言:无论是大数据从业人员还是Java从业人员,掌握Java高并发和多线程是必备技能之一.本文主要阐述Java并发包下的阻塞队列和并发容器,其实研读过大数据相关技术如Spark.Storm等源码的, ...
- Hadoop安装 与 HDFS体系结构
- JUC 包下工具类,它的名字叫 LockSupport !你造么?
前言 LockSupport 是 JUC 中常用的一个工具类,主要作用是挂起和唤醒线程.在阅读 JUC 源码中经常看到,所以很有必要了解一下. 公众号:liuzhihangs ,记录工作学习中的技术. ...
- 快速傅里叶变换(FFT)学习笔记(其二)(NTT)
再探快速傅里叶变换(FFT)学习笔记(其二)(NTT) 目录 再探快速傅里叶变换(FFT)学习笔记(其二)(NTT) 写在前面 一些约定 前置知识 同余类和剩余系 欧拉定理 阶 原根 求原根 NTT ...
- day89:luffy:使用Celery完成我的订单超时取消&Polyv视频加密播放
目录 1.我的订单超时取消 2.PoliV视频播放 1.我的订单超时取消 使用Celery完成超时取消功能 mycelery/order/tasks.py from mycelery.main imp ...
- 解决 cannot resolve 依赖包的问题
在maven import的时候 报这样的错误 之前也经常碰到这样的错误,通过reimport.清缓存等方法都可以解决.但这次试了好多次都还是这样,查看maven后发现我pom文件里也没写错. 最后是 ...
- spring 中aop 切面实战
切面相关注解: @Aspect : 声明该类为一个注解类 @Pointcut : 定义一个切点 @Before : 在切点之前执行 @After : 在切点之后执行 不管目标方法是否执行成功 @Aft ...