吝啬的国度

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述
在一个吝啬的国度里有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

前两天刚学过图论中的最短路,今天做这道题,首先想到了用最短路的思想做。写了一个Bellman-Ford,超时了,原因是顶点数*边数太大。然后用广搜写了一下,AC。存储边时用了vector,记得每次都要清空vector。

#include<stdio.h>
#include<string.h>
#include<vector>
#include<queue>
using namespace std;
const int N = 100010;
int pre[N], vis[N], n, s;
vector<int> vec[N];
void Init()
{for(int i = 1; i <= n; i++)pre[i] = i, vis[i] = 0;pre[s] = -1;
}
void bfs()
{queue<int> Q;Q.push(s);while(!Q.empty()){int t = Q.front();Q.pop();if(vis[t])continue;vis[t] = 1;for(int i = 0; i < vec[t].size(); i++){int p = vec[t][i];if(!vis[p]){pre[p] = t;Q.push(p);}}}
}
int main()
{int t, i;scanf("%d",&t);while(t--){memset(vec, 0, sizeof(vec));scanf("%d%d",&n,&s);int a, b;for(i = 0; i < n - 1; i++){scanf("%d%d",&a,&b);vec[a].push_back(b);vec[b].push_back(a);}Init();bfs();printf("%d",pre[1]);for(i = 2; i <= n; i++)printf(" %d",pre[i]);printf("\n");}return 0;
}

后来看讨论区,出题人说是把无根树转化为有根树,仔细一想,还真是。下面是代码:

/*无根树转有根树,s即为根*/
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
const int N = 100010;
int pre[N], n, s;
vector<int> vec[N];
void Init()
{for(int i = 1; i <= n; i++)pre[i] = i;pre[s] = -1;
}
void dfs(int u, int fa)
{int k = vec[u].size();for(int i = 0; i < k; i++){int v = vec[u][i];if(v != fa){pre[v] = u;dfs(v, u);}}
}
int main()
{int t, i;scanf("%d",&t);while(t--){memset(vec, 0, sizeof(vec));scanf("%d%d",&n,&s);int a, b;for(i = 0; i < n - 1; i++){scanf("%d%d",&a,&b);vec[a].push_back(b);vec[b].push_back(a);}Init();dfs(s,-1); //从根节点开始搜printf("%d",pre[1]);for(i = 2; i <= n; i++)printf(" %d",pre[i]);printf("\n");}return 0;
}

NYOJ 20 吝啬的国度 (搜索)相关推荐

  1. NYOJ 20 吝啬的国度 广度优先搜索

    吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有 ...

  2. NYOJ 20 吝啬的国度

    吝啬的国度 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市 ...

  3. NYOJ 20 吝啬的国度(深搜)

    描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设 ...

  4. NYOJ 20 吝啬的国度(深搜)

    描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设 ...

  5. NYOJ 20 吝啬的国度 续

    还是<吝啬的国度>,研读了别人的较为高效的代码,无论是时间开销,还是空间开销都要小很多啊,截图为证: 我的所有运行: 52ms的是我参照别人的写的代码,时间开销比我的小将近一半,内存开销仅 ...

  6. 《图论》— NYOJ 20 吝啬的国度

    吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有 ...

  7. 题目20: 吝啬的国度

    吝啬的国度 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市 ...

  8. NOJ 20 吝啬的国度

    开始做深搜的题,这是一种比较常见的递归,就是直接看去的点是从那来的,标记一下避免重复搜. 深搜的注意个人认为,1,要在一定范围内一般是在递归在1e4的范围内: 2,就是要注意标记,不然也可能导致超时的 ...

  9. 小白算法练习 NYOJ 吝啬的国度 dfs+邻接表

    吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有 ...

最新文章

  1. MahApps.Metro
  2. 掌握这 7 个编程设计原则,想做菜鸟都难
  3. 站点某些网页想显示母版页内的用户控件,某些网页不想显示,怎样实现
  4. Cloud Foundry技术资料汇总
  5. 开课吧怎么样_开课吧数据产品经理课程包括什么?开课吧培训的怎么样
  6. 盘点2020国内本科开设人工智能专业高校
  7. git 服务器搭建,在自己服务器上搭建私有仓库
  8. 踩不出足迹(牛客练习赛88 )
  9. maven异常001---报错The folder is already a source folder.的解决办法
  10. idea解决lombok注解失效问题
  11. ubuntu 开启dhcp服务并配置
  12. c#语法复习总结(1)-浅谈c#.net
  13. SuperWebSocket发布0.1版本
  14. 【转】《从入门到精通云服务器》第三讲-配置与升级云服务器
  15. Linux虚拟文件系统之文件打开(sys_open())
  16. 将CDlinux 0.9.7.1的iso安装到U盘并安装grub2
  17. 华侨大学计算机等级,全国计算机等级考试报名系统-华侨大学.doc
  18. 验证哥德巴赫猜想(函数专题)
  19. 敏捷开发:编写开发文档的利与弊
  20. 无懈可击 css html5,无懈可击的Web设计(第3版) 带目录书签完整pdf[80MB]

热门文章

  1. HashMap根据value值排序
  2. CentOS上安装skype
  3. Linux内核社区是数字军火商、斯拉夫兵工厂甚至NSA的最爱
  4. CSS学习笔记(十四) 我们前端是怎么跟设计师沟通的
  5. 注意Hibernate4在开发当中的一些改变
  6. Work measurement II
  7. Optimizing graphics performance
  8. DML、DDL、DCL的分别是什么
  9. zabbix源码安装 令人窒息的操作
  10. Flutter 下拉刷新花式玩法