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

    紫书P352

    无根树转有根树,如果节点数n<=10^6,那么邻接矩阵就见不了了。用vector数组,vector数组实际占用空间与n成正比。

    #include <stdio.h>
    #include <vector>
    
    using namespace std;
    
    #define MAXN 1000010
    
    vector<int> G[MAXN];
    
    int n;  //n个点,n-1条边
    int p[MAXN];
    
    void Build_Tree () {
        scanf("%d",&n);
        for(int i=0;i<n-1;i++) {
            int u,v;
            scanf("%d%d",&u,&v);
            G[u].push_back(v);
            G[v].push_back(u);
        }
    }
    
    void dfs(int u,int fa) {
        int d = G[u].size();
        for(int i=0;i<d;i++) {
            int v = G[u][i];
            if(v!=fa) dfs(v,p[v]=u);
        }
    }
    
    int main()
    {
        freopen("input.txt","r",stdin);
        Build_Tree();
        dfs(1,-1);
        p[1] = -1;
        for(int i=0;i<n;i++)
            printf("%d ",p[i]);
        puts("");
        return 0;
    }

    p[root] = -1;

    记得一定要v和父节点相等,如果忽略,就会引起无限递归。

  • 相关阅读:
    iOS 远程推送
    iOS 本地推送
    iOS 循环利用的注意事项
    iOS 通知代理执行代理方式时,代理为nil的解决办法
    iOS SSZipArchive
    iOS PushMebaby
    Objective
    Objective
    Objective
    Objective
  • 原文地址:https://www.cnblogs.com/TreeDream/p/5775054.html
Copyright © 2011-2022 走看看