P5022 旅行 (NOIP2018)
先考虑是一颗树的情况
求最小的 dfs 序
显然按儿子编号从小到大dfs
如果有多一条边怎么办
显然会有一条边不用走
直接枚举删那条边然后每次都暴力 dfs
复杂度 $O(n^2)$
注意每个节点的儿子顺序先预处理好
不要每次都重新算
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector>
using namespace std;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=;
int fir[N],from[N<<],to[N<<],cntt;//存排序前的边
inline void add(int &a,int &b)
{
from[++cntt]=fir[a];
fir[a]=cntt; to[cntt]=b;
}
int n,m,ans[N];
vector <int> v[N];//存排序后的边
int st[N],t,p1,p2;
bool vis[N];
void dfs(int x)//暴力dfs求字典序
{
st[++t]=x; vis[x]=;
int len=v[x].size();
for(int i=;i<len;i++)
{
int &to=v[x][i]; if(vis[to]||(p1==x&&p2==to)||(p1==to&&p2==x)) continue;
dfs(to);
}
}
inline bool pd()//暴力比较字典序大小
{
if(t<n) return ;
if(!ans[]) return ;
for(int i=;i<=n;i++)
if(ans[i]!=st[i])
return ans[i]<st[i] ? : ;
}
int e[N][],tmp[N],tot;
int main()
{
freopen("travel.in","r",stdin);
freopen("travel.out","w",stdout);
int a,b;
n=read(); m=read();
for(int i=;i<=m;i++)
{
a=read(); b=read();
add(a,b); add(b,a);
e[i][]=a; e[i][]=b;
}
for(int i=;i<=n;i++)//预处理儿子顺序
{
tot=;
for(int j=fir[i];j;j=from[j]) tmp[++tot]=to[j];
sort(tmp+,tmp+tot+);
for(int j=;j<=tot;j++) v[i].push_back(tmp[j]);
}
if(m==n-)
{
dfs();
for(int i=;i<=n;i++) printf("%d ",st[i]);
return ;
}
for(int i=;i<=m;i++)
{
t=; p1=e[i][]; p2=e[i][];//暴力删边
for(int i=;i<=n;i++) vis[i]=;
dfs();
if(pd()) for(int i=;i<=n;i++) ans[i]=st[i];
}
for(int i=;i<=n;i++) printf("%d ",ans[i]);
return ;
}
P5022 旅行 (NOIP2018)的更多相关文章
- 【题解】 P5022旅行
[题解]P5022 旅行 当给定你一颗树的时候,这题就是一道送分题,凉心啊! 但是给定你一颗基环树呢? 暴力断环直接跑. 但是数据范围\(n\le 1000\) 乱做就完事了. 考场上这样想的,对于\ ...
- 【luogu P5022 旅行】 题解
题目连接:https://www.luogu.org/problemnew/show/P5022 \(NOIP2018 DAY2T1\) 考场上只写了60分,很容易想到当 m = n - 1 时的树的 ...
- P5022 旅行
原题链接 https://www.luogu.org/problem/P5022 本着快csp了,做点往年的NOIp的题试试水来着,没想到水这么深 难度还挺大的,耗了我一天的时间(可能是我太菜了) ...
- 洛谷 P5022 旅行——题解
发现大部分题解都是O(n^2)的复杂度,这里分享一个O(n)复杂度的方法. 题目传送 首先前60%的情况,图是一棵无根树,只要从1开始DFS,每次贪心走点的编号最小的点就行了.(为什么?因为当走到一个 ...
- 洛谷P5022 旅行 题解 去环/搜索
题目链接:https://www.luogu.org/problem/P5022 这道题目一开始看的时候没有思路,但是看到数据范围里面有一个: \(m = n-1\) 或 \(m = n\) ,一下子 ...
- Luogu P5022 旅行
开始写复赛题了 先放张图纪念我惨烈的卡常之路 不说了,简直悲伤 题目链接 思路么..不想写了 Code //不要在意四十行超级加速,卡常用的 #include<bits/stdc++.h> ...
- P5022 旅行[基环树]
以后必须学会面向数据编程!看半天题目不知道咋写直接爆搜,结果分少的可怜,还不如直接贪搞个60分. 观察数据,发现图至多存在一个环. 显然,如果没有环,这个题不跟你多bb,直接贪就完事了,线性复杂度. ...
- 洛谷P5022 旅行 题解
前面几个代码都是部分分代码,最后一个才是AC了的,所以最后一个有详细注释 安利一发自己的Blog 这是提高组真题,233有点欧拉回路的感觉. 题目大意: 一个 连通 图,双向边 ,无重边 , 访问图中 ...
- Luogu P5022 旅行 搜索+贪心
好吧...一直咕..现在才过...被卡常卡到爆... 写的垃圾版本,$n^2$无脑删边..可以发现走出来的是棵树...更优秀的及数据加强版先咕着...一定写.qwq #include<cstdi ...
随机推荐
- Solr5.5.3的研究之路 ---1、从Mysql导入数据并创建索引
公司需要用到全文检索,故使用Solr,也是新人一枚,本人查看的前提是Solr已经安装部署成功,我用的服务器是自带的Jetty 1.创建Collection [root@whoami bin]# ./s ...
- JAVA基础知识总结8(设计模式)
设计模式:JAVA中有23种设计模式 1.解决问题最行之有效的思想. 2.是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. 3.使用设计模式是为了可重用代码.让代码更容易被他人理解 ...
- javascript变量声明提升(hoisting)
javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面. 先看一段代码 1 2 3 4 5 var v = &quo ...
- js中的控制结构for-in语句
var arr=['赵','钱','孙','李']; for(var i=0;i<arr.length;i++){ console.log(arr[i]); } var obj={ name:' ...
- Android中的文件读写总结
在Android中,文件主要分为两大类,内部存储和外部存储 内部存储的文件是程序私有的,分为普通文件和Cache文件 外部文件也可以是私有的,也可以是共有的,这要根据文件的目录位置来决定 共有文件可以 ...
- hdu5521 Meeting
传送门 题目 Bessie and her friend Elsie decide to have a meeting. However, after Farmer John decorated hi ...
- 构建一个在线ASCII视频流服务
构建一个在线ASCII视频流服务 2018-03-26 正常的文章 1685 什么是ASCII视频流服务? 其实这个名字是咱胡乱起的,具体叫啥我也不清楚,但效果如下: 大家可以在自己的命令行里试下, ...
- PHP中抽象类与接口的区别
PHP中抽象类与接口的区别 抽象类abstract 概念 定义为抽象的类不能被实例化.任何一个类,如果有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的类. 继承一个抽象类的时候,子类必须定义 ...
- Chrome Plugin Recommendation
1.AdBlock 拦截广告神器 2.IPBlade 变更IP地址,使你自由 3.JSON-handle 让接口返回的JSON数据更好看 4.Proxy SwitchyOmega 变更浏览器代理 5. ...
- Git相关安装包打包下载
Git相关软件偶尔需要***才能下载,故分享于此 1.Git-2.15.0-64-bit.exe 2.TortoiseGit-2.5.0.0-64bit.msi 3.TortoiseGit-Langu ...