再谈树---无根树转有根树( dfs搜索转化+fa数组记录父节点) *【模板】
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <vector>
#include <algorithm>
#define N 100000+2
using namespace std; //无根树转有根树算法
/*
算法分析:所谓无根树,就是根节点任意的树。我们可以给它确定一个根节点。
我们可以假定认为某一个节点为根节点,然后从该节点开始进行dfs或者bfs搜索,
在搜索的过程中,就像记录路径那样记录一个father[]数组,用来记录当前节点的
父亲节点。算法很简单,需要注意两个地方:
(*1.设置根节点father[root]=-1; 表示根节点没有父节点
(*2.bfs或dfs的搜索过程中,判断遇到的点是不是根节点,不是的话就进行父节点的
指定。如果是根节点的话,千万不要修改,如果忘记判断这个条件,将引起无限递归(dfs)
或者无限循环(bfs)
*/
int n; //n个节点,n-1条边,vector创建二维数组存储(动态存储可以不用考虑存储大小)
vector<int>q[N];
int fa[N]; //记录父节点信息 void dfs(int u, int father)//递归转化以u为根节点,u的父节点为father
{
int len=q[u].size(); //遍历与该点相连的点
for(int i=0; i<len; i++)
{
int v=q[u][i]; //获取该点
if(v!=father) //*判断v和其父节点是否相同,否则引起无限循环
dfs(v, fa[v]=u); //把v的父节点设为u,然后递归转化以v根节点的子树
}
} int main()
{
scanf("%d", &n);
int u, v;
for(int i=0; i<n-1; i++)
{
scanf("%d %d", &u, &v);
q[u].push_back(v);
q[v].push_back(u);
}
//进行dfs转化有根树
fa[1]=-1;
dfs(1, -1); return 0;
}
再谈树---无根树转有根树( dfs搜索转化+fa数组记录父节点) *【模板】的更多相关文章
- poj 1330 【最近公共祖先问题+fa[]数组+ 节点层次搜索标记】
题目地址:http://poj.org/problem?id=1330 Sample Input 2 16 1 14 8 5 10 16 5 9 4 6 8 4 4 10 1 13 6 15 10 1 ...
- codeforces 570 D. Tree Requests 树状数组+dfs搜索序
链接:http://codeforces.com/problemset/problem/570/D D. Tree Requests time limit per test 2 seconds mem ...
- 蒟蒻浅谈树链剖分之一——两个dfs操作
树链剖分,顾名思义就是将树形的结构剖分成链,我们以此便于在链上操作 首先我们需要明白在树链剖分中的一些概念 重儿子:某节点所有儿子中子树最多的儿子 重链:有重儿子构成的链 dfs序:按重儿子优先遍历时 ...
- hihocoder 1050 树中的最长路(动态规划,dfs搜索)
hihocoder 1050 树中的最长路(动态规划,dfs搜索) Description 上回说到,小Ho得到了一棵二叉树玩具,这个玩具是由小球和木棍连接起来的,而在拆拼它的过程中,小Ho发现他不仅 ...
- 大臣的旅费---树的直径(dfs)
很久以前,T王国空前繁荣.为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市. 为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者 ...
- Leetcode之深度优先搜索(DFS)专题-1123. 最深叶节点的最近公共祖先(Lowest Common Ancestor of Deepest Leaves)
Leetcode之深度优先搜索(DFS)专题-1123. 最深叶节点的最近公共祖先(Lowest Common Ancestor of Deepest Leaves) 深度优先搜索的解题详细介绍,点击 ...
- [转载]再谈百度:KPI、无人机,以及一个必须给父母看的案例
[转载]再谈百度:KPI.无人机,以及一个必须给父母看的案例 发表于 2016-03-15 | 0 Comments | 阅读次数 33 原文: 再谈百度:KPI.无人机,以及一个必须 ...
- Unity教程之再谈Unity中的优化技术
这是从 Unity教程之再谈Unity中的优化技术 这篇文章里提取出来的一部分,这篇文章让我学到了挺多可能我应该知道却还没知道的知识,写的挺好的 优化几何体 这一步主要是为了针对性能瓶颈中的”顶点 ...
- [ZOJ 1011] NTA (dfs搜索)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1011 题目大意:在一棵树上,给你起始状态,问你能否到达终止状态. ...
随机推荐
- kubernetes实战(十六):k8s高可用集群平滑升级 v1.11.x 到v1.12.x
1.基本概念 升级之后所有的containers会重启,因为hash值会变. 不可跨版本升级. 2.升级Master节点 当前版本 [root@k8s-master01 ~]# kubeadm ver ...
- 【CSS3】CSS3自学
CSS3学习网址:http://www.runoob.com/css3/css3-tutorial.html
- python中操作mysql
import pymysql # 连接数据库 connect = pymysql.Connect( host='localhost', port=3306, user='root', passwd=' ...
- python中计算程序用时的方法
import time start = time.clock() ...... end = time.clock() print(end - start)
- 小希的迷宫(hdu1272 并查集)
http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=259#problem/D Description 上次Gardon的迷宫城堡小希 ...
- How many Fibs?(poj 2413)大数斐波那契
http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=259#problem/C Description Recall the defi ...
- IE加载项
加载项 加载项也称为ActiveX控件.浏览器扩展.浏览器帮助应用程序对象或工具栏,可以通过提供多媒体或交互式内容(如动画)来增强对网站的体验. 但是,某些加载项可导致计算机停止响应或显示不需要的 ...
- Hive的安装与配置
1.因为我使用MySQL做为Hive的元数据库,所以先安装MySQL. 参考:http://www.cnblogs.com/hunttown/p/5452205.html 登录命令:mysql -h主 ...
- hadoop streaming怎么设置key
充分利用hadoop的map输出自动排序功能,能够有效提高计算效率.Hadoop streaming框架默认情况下会以'/t’作为分隔符,将每行第一个'/t’之前的部分作为key,其余内容作为valu ...
- win10安装后耳机有声音而外放无声音
安装win10后耳机声音正常,而外放没声音.检查了小喇叭.播放器和设备管理器一切正常,驱动也重装了好些次.喇叭音量设置.视频音量设置均正常.花费很多时间,结果发现是键盘上有个小喇叭+的键的问题.按fn ...