题目戳我

\(\text{Solution:}\)

首先题目描述有一点不准确:回头是必须要走完一条路无路可走的时候才能返回。

对于树的情况:显然贪心做就完事了。

对于基环树的情况:对于一个\(n\)条边的环,如果我们已经走了\(n-1\)条边,那么此时我们已经可以到达环上任意一点了。所以我们可以枚举并删边。

题目中要求一个点除非回溯否则不能再次访问,这意味着一定有一条边无法访问,枚举那一条边即可。

时间复杂度\(O(n^2).\)

#include<bits/stdc++.h>
using namespace std;
const int inf=(1<<30);
int n,m,E[5001][2];
vector<int>G[5001];
namespace P1{
vector<int>ans;
void dfs(int x,int y){
ans.push_back(x);
for(int i=0;i<G[x].size();++i){
int j=G[x][i];
if(j==y)continue;
dfs(j,x);
}
}
void solve(){
dfs(1,0);
for(int i=0;i<ans.size();++i)printf("%d ",ans[i]);
puts("");
}
}
namespace P2{
vector<int>ans,res;
bitset<5001>vis;
int Dv,Du;
void dfs(int x,int fa){
res.push_back(x);vis[x]=1;
for(int i=0;i<G[x].size();++i){
int j=G[x][i];
if((x==Du&&j==Dv)||(x==Dv&&j==Du)||vis[j]||j==fa)continue;
dfs(j,x);
}
}
inline bool check(){
for(int i=0;i<n;++i){
if(ans[i]!=res[i]){
if(ans[i]>res[i])return false;
return true;
}
}
return true;
}
void solve(){
for(int i=0;i<n;++i)ans.push_back(inf),res.push_back(0);
for(int i=1;i<=m;++i){
res.clear();vis.reset();
Du=E[i][0],Dv=E[i][1];
dfs(1,0);
for(;(int)res.size()<n;)res.push_back(inf);
if(!check())swap(res,ans);
}
for(int i=0;i<n;++i)printf("%d ",ans[i]);
puts("");
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i){
int x,y;
scanf("%d%d",&x,&y);
G[x].push_back(y);
G[y].push_back(x);
E[i][0]=x,E[i][1]=y;
}
for(int i=1;i<=n;++i)sort(G[i].begin(),G[i].end());
if(m==n-1){P1::solve();return 0;}
P2::solve();
return 0;
}

最新文章

  1. echo命令
  2. JAVA的POI操作Excel
  3. 10月28日上午 PHP数据访问
  4. Yii2登陆添加验证码
  5. jq中如何阻止元素的默认行为?
  6. Mybatis关于like的字符串模糊处理
  7. 获取CentOS系统详情的九个uname命令实例
  8. backpropagate
  9. 配置并学习微信JS-SDK(2)—扫一扫接口http://www.qq210.com/shoutu/android
  10. js_day14
  11. 【邻接表字符串Hash】【HDU1800】Flying to the Mars
  12. UVA11627-Slalom(二分法)
  13. sortable items不让他拖,也不让他放。cancel不然他拖动
  14. python之socket编程------粘包
  15. Mysql 库表
  16. rabbitmq - (消息队列) 的基本原理介绍
  17. FileReader实现图片预览,并上传(js代码)
  18. Java集合框架总结—超详细-适合面试
  19. Windows环境搭建mysql服务器
  20. 在docker 容器中安装命令

热门文章

  1. MD5加密,java String 转变成MD5 String 详细代码,工具类Android开发必备
  2. Idea使用方式——创建类模板
  3. shader变体
  4. ios .framework动态库重签名
  5. DHCP和NAT
  6. 关于js与jquery中的文档加载
  7. OpenJ_Bailian - 2995-登山(两遍最长上升子序列+枚举顶点)
  8. 一个后端开发的 Vue 笔记【入门级】
  9. Avtiviti工作流规范 BPM与BPMN
  10. Linux下mysql安装记录