zoukankan      html  css  js  c++  java
  • PAT A1053 Path of Equal Weight [树的DFS遍历]

    题目描述

    链接
    给出树的结构和权值,找从根结点到叶子结点的路径上的权值相加之和等于给定目标数的路径,并且从大到小输出路径

    分析

    • 静态数组建树
    • dfs遍历:注意什么地方要回溯状态
    • 二维数组排序,基本用vector实现,记住以后写begin和end了!如果用vector的话
    bool cmp(vector<int> a, vector<int> b){
        int len = min(a.size(),b.size());
        for(int i=0;i<len;i++){
            if(a[i] == b[i]) continue
        }
    }
    sort(ans.begin(), ans.end(), cmp);
    
    • 当然最后这里还是用了一维数组排序,因为有个点过不了,很奇怪
    #include<bits/stdc++.h>
    using namespace std;
    
    const int maxn = 105;
    struct node{
        int w;
        vector<int> child;
    }nodes[maxn];
    
    bool cmp(int a, int b){
        return nodes[a].w > nodes[b].w;
    }
    
    int n,m,s,k,id;
    
    int sum;
    vector<vector<int> > ans;
    vector<int> path;
    void dfs(int i){
        path.push_back(nodes[i].w);
        sum += nodes[i].w;
        if(nodes[i].child.size()==0){
            if(sum == s){
                ans.push_back(path);
            }
            path.pop_back();
            sum -= nodes[i].w;
            return;
        }
        for(int j=0;j<nodes[i].child.size();j++){
            dfs(nodes[i].child[j]);
        }
        path.pop_back();
        sum -= nodes[i].w;
    }
    
    
    int main(){
        cin>>n>>m>>s;
        for(int i=0;i<n;i++){
            cin>>nodes[i].w;
        }
        for(int i=0;i<m;i++){
            cin>>id>>k;
            for(int j=0;j<k;j++){
                int tmp;
                cin>>tmp;
                nodes[id].child.push_back(tmp);
            }
            sort(nodes[id].child.begin(), nodes[id].child.end(), cmp);
        }
        dfs(0);
        for(int i=0;i<ans.size();i++){
            for(int j=0;j<ans[i].size();j++){
                if(j==0) cout<<ans[i][j];
                else cout<<" "<<ans[i][j];
            }
            cout<<endl;
        }
    
    }
    
    
  • 相关阅读:
    UVA 11488 Hyper Prefix Sets (字典树)
    UVALive 3295 Counting Triangles
    POJ 2752 Seek the Name, Seek the Fame (KMP)
    UVA 11584 Partitioning by Palindromes (字符串区间dp)
    UVA 11100 The Trip, 2007 (贪心)
    JXNU暑期选拔赛
    计蒜客---N的-2进制表示
    计蒜客---线段的总长
    计蒜客---最大质因数
    JustOj 2009: P1016 (dp)
  • 原文地址:https://www.cnblogs.com/doragd/p/11269755.html
Copyright © 2011-2022 走看看