zoukankan      html  css  js  c++  java
  • 无根树转有根树

     1 #include <bits/stdc++.h>
     2 #include <iostream>
     3 #include <queue>
     4 #include <stdio.h>
     5 #include <string.h>
     6 #include <algorithm>
     7 #include <string>
     8 #include <math.h>
     9 #include <set>
    10 #include <map>
    11 #define MAXN 1000000+10
    12 #define INF 1000000000
    13 #define eps 10e-6
    14 #define ll long long
    15 using namespace std;
    16 
    17 bool cmp(int a, int b)
    18 {
    19     return a > b;
    20 }
    21 
    22 //*******无根树转为指定节点为根的有根树并输出每个节点的父亲节点***************************
    23 
    24 vector<int> mp[MAXN];         //*****邻接表存储图
    25 int pre[MAXN];               //*****存储每个节点的父亲节点
    26 
    27 void dfs(int u, int fa)  //***形参分别表示当前节点和其父亲节点
    28 {
    29     int len=mp[u].size();  //*****当前节点的儿子节点的个数
    30     for(int i=0; i<len; i++)
    31     {
    32         int v=mp[u][i];   //****选中当前节点的一个儿子节点作为下一个节点
    33         if(v!=fa)            //****如果父亲节点的儿子不是是自己,则其不为叶子节点,继续搜索
    34         {
    35             dfs(v, pre[v]=u);
    36         }
    37     }
    38 }
    39 
    40 int main(void)
    41 {
    42     std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    43     int n;
    44     cin >> n;
    45     for(int i=0; i<n-1; i++)
    46     {
    47         int x, y;
    48         cin >> x >> y;
    49         mp[x].push_back(y);
    50         mp[y].push_back(x);
    51     }
    52     int root;
    53     cin >> root;    //****输入目标根节点
    54     pre[root]=-1;   //****根节点没有父亲节点
    55     dfs(root, -1);
    56     for(int i=0; i<n; i++)
    57     {
    58         if(pre[i]!=-1)
    59         {
    60             cout << pre[i] << " ";
    61         }
    62     }
    63     cout << endl;
    64     return 0;
    65 }
    66 
    67 /***************************
    68 输入样例:
    69 8
    70 0 1
    71 0 2
    72 0 3
    73 1 4
    74 1 5
    75 5 6
    76 5 7
    77 1
    78 //*****************
    79 输出样例:
    80 1 0 0 1 1 5 5
    81 //*****************
    82 即0节点的父亲节点为1;
    83 2,3节点的父亲节点为0;
    84 4,5节点的父亲节点为1;
    85 7,8节点的父亲节点为5;
    86 *******************************/
    //******刘汝佳算法竞赛入门经典p197**
  • 相关阅读:
    tyvj 1031 热浪 最短路
    【bzoj2005】 [Noi2010]能量采集 数学结论(gcd)
    hdu 1394 Minimum Inversion Number 逆序数/树状数组
    HDU 1698 just a hook 线段树,区间定值,求和
    ZeptoLab Code Rush 2015 C. Om Nom and Candies 暴力
    ZeptoLab Code Rush 2015 B. Om Nom and Dark Park DFS
    ZeptoLab Code Rush 2015 A. King of Thieves 暴力
    hdoj 5199 Gunner map
    hdoj 5198 Strange Class 水题
    vijos 1659 河蟹王国 线段树区间加、区间查询最大值
  • 原文地址:https://www.cnblogs.com/geloutingyu/p/5913338.html
Copyright © 2011-2022 走看看