nyoj 20-吝啬的国度 (DFS)
2024-09-01 14:44:07
20-吝啬的国度
内存限制:64MB
时间限制:1000ms
Special Judge: No
accepted:12
submit:43
题目描述:
在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。
输入描述:
第一行输入一个整数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)
样例输入:
复制
1
10 1
1 9
1 8
8 10
10 3
8 6
1 2
10 4
9 5
3 7
样例输出:
-1 1 10 10 9 8 3 1 1 8 拓展:
free对内存进行释放,主要是将malloc、new、realloc等申请的内存进行释放
STL中的vector是进行动态内存的追加,用free进行内存释放会使编译器不清楚从哪开始释放 分析:
①、在数据结构方面我们选择二维vector,用vector来存对应城市相邻的城市,用.size()就可以得到与该城市相邻的城市个数
②、因为DFS是线性的、回溯型搜索方式,将会直接或回溯式的找到前面直接相邻的城市 步骤、
①、通过vector建立两个城市的双向距离关系
②、使用dfs从入口点s进入,将每一个相邻城市的前驱都赋值为对应的s 核心代码:
void dfs(int s)
{
for(int i = ; i < A[s].size(); ++ i)
{
if(f[A[s][i]]) continue;
f[A[s][i]] = s;
dfs(A[s][i]);
}
}
C/C++代码实现(AC):
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <stack>
#include <map>
#include <queue> using namespace std;
const int MAXN = 1e5 + ;
int f[MAXN];
vector <int> A[MAXN]; void init(int n)
{
while(n --)
{
int a, b;
scanf("%d%d", &a, &b);
A[a].push_back(b);
A[b].push_back(a);
}
} void dfs(int s)
{
for(int i = ; i < A[s].size(); ++ i)
{
if(f[A[s][i]]) continue;
f[A[s][i]] = s;
dfs(A[s][i]);
}
} int main()
{
int t;
scanf("%d", &t);
while(t --)
{
int n, s;
memset(f, , sizeof(f));
memset(A, , sizeof(A));
scanf("%d%d", &n, &s);
init(n - ); dfs(s);
f[s] = -;
for(int i = ; i < n; ++ i)
printf("%d ", f[i]);
printf("%d\n",f[n]);
}
return ;
}
最新文章
- Struts2 文件上传和文件下载
- 假期实践作业:从IT角度看地铁
- fopen的第一个参数不能有&#39;\n&#39;
- [MacOS] xcrun: error: active developer path (";/Volumes/Xcode/Xcode6-Beta.app/Contents/Developer";) does not exist, use xcode-select to change
- 《shell脚本if..then..elif..then.if语句的总结》
- android 设置gridView item的高度
- LeetCode 122. Best Time to Buy and Sell Stock II (买卖股票的最好时机之二)
- Oracle 给予访问其他用户包的权限
- 【转】从源码分析Handler的postDelayed为什么可以延时?
- java 命令查字节码文件, 查.class文件内容
- Shovel Sale CodeForces - 899D (数位dp)
- go微服务框架go-micro深度学习 rpc方法调用过程详解
- 原生js格式化json工具
- c#.net基础
- RN中移动组件开发
- bzoj2909: Bipartite Numbers
- Redis学习系列六ZSet(有序列表)及Redis数据结构的过期
- [AHOI2013]作业
- 项目Beta冲刺(团队)总结
- Smart Pointer 智能指针