zoukankan      html  css  js  c++  java
  • hihocoder-1542-无根树变有根树

    hihocoder-1542-无根树变有根树

    #1542 : 无根数变有根树

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    给定一棵包含 N 个节点的无根树,小Hi想知道如果指定其中某个节点 K 为根,那么每个节点的父节点是谁?

    输入

    第一行包含一个整数 N 和 K。1 ≤ N ≤ 1000, 1 ≤ K ≤ N。    

    以下N-1行每行包含两个整数 a 和 b,代表ab之间存在一条边。 1 ≤ ab ≤ N。  

    输入保证是一棵树。

    输出

    输出一行包含 N 个整数,分别代表1~N的父节点的编号。对于 K 的父节点输出0。

    样例输入
    5 4  
    1 2  
    3 1  
    4 3  
    5 1
    样例输出
    3 1 4 0 1

    简单的遍历问题。

    /// 1542 
    #include <cstdio> 
    #include <cstdlib> 
    #include <cstring> 
    
    #include <iostream> 
    using namespace std; 
    const int MAXN = 1000 + 10; 
    
    int n, k, dp[MAXN][MAXN], root[MAXN], vis[MAXN]; 
    
    void dfs(int k){
        for(int i=1; i<=n; ++i){
            if( vis[i] == 0 && dp[i][k] == 1 ){
                root[i] = k; 
                vis[i] = 1; 
                dfs(i); 
            }
        }
    }
    
    int main(){
    
        int x, y; 
        while(scanf("%d %d", &n, &k) != EOF){
            memset(dp, 0, sizeof(dp)); 
            memset(root, 0, sizeof(root)); 
            memset(vis, 0, sizeof(vis)); 
    
            for(int i=1; i<n; ++i){
                scanf("%d %d", &x, &y); 
                dp[x][y] = dp[y][x] = 1; 
            } 
            vis[k] = 1; 
            dfs(k); 
            for(int i=1; i<=n; ++i){
                if(i == n){
                    printf("%d
    ", root[i]);
                }else{
                    printf("%d ",  root[i]);
                }
            } 
        } 
        return 0; 
    }
    

      

  • 相关阅读:
    改变windows下installer文件夹位置,目录链接(不是快捷方式)
    SQL2008根据日志恢复
    HTML5实践
    人类的本能——自私与善
    打油诗 看《大上海》
    POSA2:Wrapper Facade模式
    解析XML文件
    MediaWiki编辑工具
    每周一荐:设计模式
    每周一荐:分布式计算的模式语言
  • 原文地址:https://www.cnblogs.com/zhang-yd/p/7373537.html
Copyright © 2011-2022 走看看