吝啬的国度 深搜
来源:互联网 发布:syslog 数据库 编辑:程序博客网 时间:2024/06/07 15:07
- 输入
- 第一行输入一个整数M表示测试数据共有M(1<=M<=5)组
每组测试数据的第一行输入一个正整数N(1<=N<=100000)和一个正整数S(1<=S<=100000),N表示城市的总个数,S表示参观者所在城市的编号
随后的N-1行,每行有两个正整数a,b(1<=a,b<=N),表示第a号城市和第b号城市之间有一条路连通。 - 输出
- 每组测试数据输N个正整数,其中,第i个数表示从S走到i号城市,必须要经过的上一个城市的编号。(其中i=S时,请输出-1)
- 样例输入
110 11 91 88 1010 38 61 210 49 53 7
- 样例输出
-1 1 10 10 9 8 3 1 1 8
分析:
要找从s到i的前一步的经过哪里,这就需要求出和s相连的城市中,求出每个和s相连的 城市的前一步是什么,然后按照同样的步伐,深搜来寻找剩下的前一步是什么
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #include <vector> #include <set> #include <map> #include <stack> #include <string> #include <queue>using namespace std; const int maxn = 1e5+100;vector<int>v[maxn];int pre[maxn];void dfs(int s){for(int i = 0;i < v[s].size();i++){if(pre[v[s][i]])continue;pre[v[s][i]] = s;dfs(v[s][i]);}}int main() { int t; cin >> t; while(t--) { int n,s; cin >> n >> s; int a,b; memset(v,0,sizeof(v)); memset(pre,0,sizeof(pre)); for(int i = 0;i < n-1;i++) { cin >> a >> b; v[a].push_back(b); v[b].push_back(a); } pre[s] = -1; dfs(s); for(int i = 1;i <= n;i++) { cout << pre[i]; if(i != n) cout << " "; } cout << endl; } return 0; }
阅读全文
0 0
- 吝啬的国度 深搜
- NYOJ20 吝啬的国度 【深搜】
- 吝啬的国度(深搜)
- NYOJ-20 吝啬的国度【深搜】
- nyoj题目20吝啬的国度【深搜】
- 吝啬的国度(深搜+vector)
- nyoj20吝啬的国度(深搜)
- nyoj-20-吝啬的国度(深搜)
- nyoj 20 吝啬的国度 (深搜)
- NYOJ 20 吝啬的国度(深搜)
- NYOJ 20 吝啬的国度(深搜)
- nyoj-20-吝啬的国度(深搜)
- nyoj_20 吝啬的国度
- 吝啬的国度
- noj 吝啬的国度
- 吝啬的国度
- NYOJ 吝啬的国度
- NYOJ 吝啬的国度
- 使用vim
- 构建Spring Restful API请求参数解析
- 关于哈希,分布式哈希表,一致性哈希
- Python 使用 asyncio 包处理并发
- 如何利用颜色和线条让表格更有魅力以奖金分配表为例
- 吝啬的国度 深搜
- hdu-1566-Color the ball-线段树-java
- 设计模式(23个)
- 《剑指offer》刷题笔记(数组):构建乘积数组
- 《Java源码分析》:LinkedHashMap
- 【TX1学习与开发系列】(一)介绍与刷机安装、配置
- java中数据结构(二)双链表总结
- 基于哈希的图像检索框架
- https 证书实现