zoukankan      html  css  js  c++  java
  • [模板] dfs序

    B.树之呼吸-贰之型-dfs序
    Time Limit: 1000 MS Memory Limit: 32768 K
    Total Submit: 42 (16 users) Total Accepted: 22 (15 users) Special Judge: No
    Description

    给一棵 n 个结点的树,结点编号从 1 到 n,并指定 m 号结点为根;

    请你输出这棵树长度为 2*n 的 dfs 序;

    注意:在深度优先遍历面对多条分支时,请按结点编号从小到大依次遍历。

    Input

    输入第一行为一个正整数 T,表示测试数据组数;

    对于每组测试数据,输入第一行为两个正整数 n、m,表示树的结点数及根结点的编号;

    接下来 n - 1 行给出树的结构,每行两个正整数 x、y,表示结点 x 与结点 y 有边相连;

    1 <= T <= 10,1 <= n <= 1e5,1 <= m <= n。

    Output

    每组测试数据的第一行输出“Case #i:”(不含引号),表示是第 i 组测试数据;

    接下来一行输出 2*n 个正整数,表示该树的 dfs 序,用空格分隔;

    行末请不要输出多余空格。

    Sample Input

    2

    5 2

    2 1

    2 3

    2 4

    4 5

    3 3

    1 2

    3 2

    Sample Output

    Case #1:

    2 1 1 3 3 4 5 5 4 2

    Case #2:

    3 2 1 1 2 3

    Author
    陈鑫

    题意: 给一棵 n 个结点的树,结点编号从 1 到 n,并指定 m 号结点为根;
    请你输出这棵树长度为 2*n 的 dfs 序;
    注意:在深度优先遍历面对多条分支时,请按结点编号从小到大依次遍历。
    思路:dfs在进入时记录一次当前结点的下标,回溯时记录一次当前结点的下标

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<queue>
     5 using namespace std;
     6 typedef long long ll;
     7 const int amn=2e5+5;
     8 int n,m,ans=0,idx[amn],dfn[amn],cnt;
     9 vector<int> eg[amn];
    10 void dfs(int x){
    11     dfn[++cnt]=x;
    12     idx[x]=1;
    13     for(int i=0;i<eg[x].size();i++){
    14         int y=eg[x][i];
    15         if(idx[y])continue;
    16         dfs(y);
    17     }
    18     dfn[++cnt]=x;
    19 }
    20 int main(){
    21     int T,x,y;scanf("%d",&T);
    22     for(int C=1;C<=T;C++){
    23         for(int i=1;i<=n;i++)eg[i].clear(); ///注意vector在输入前要清空
    24         scanf("%d%d",&n,&m);
    25         for(int i=1;i<n;i++){
    26             scanf("%d%d",&x,&y);
    27             eg[y].push_back(x);
    28             eg[x].push_back(y);
    29         }
    30         cnt=0;
    31         memset(idx,0,sizeof idx);
    32         dfs(m);
    33         printf("Case #%d:
    ",C);
    34         for(int i=1;i<=2*n;i++)printf("%d%c",dfn[i],i<2*n?' ':'
    ');
    35     }
    36 }
    37 /**
    38 题意: 给一棵 n 个结点的树,结点编号从 1 到 n,并指定 m 号结点为根;
    39 请你输出这棵树长度为 2*n 的 dfs 序;
    40 注意:在深度优先遍历面对多条分支时,请按结点编号从小到大依次遍历。 
    41 思路:dfs在进入时记录一次当前结点的下标,回溯时记录一次当前结点的下标
    42 **/
  • 相关阅读:
    int string java 呼转
    E:Encountered a section with no Package: header, E:Problem with MergeList /var/lib/apt/lists/******
    东南大学课程表爬虫
    文件传输器
    springmvc-项目启动初始化类
    分享一段线程队列--生产者和消费者代码
    maven-assembly-plugin 插件打包一个bug手动解决方式
    dubbo Main独立运行,脱离web容器
    Logstash5.6.1-Kafka插件配置
    kafka 设置开机启动
  • 原文地址:https://www.cnblogs.com/Railgun000/p/11823264.html
Copyright © 2011-2022 走看看