0
点赞
收藏
分享

微信扫一扫

PAT甲级真题-C++-Path of Equal Weight

卿卿如梦 2022-01-21 阅读 29

Path of Equal Weight

-->练习此题<--

题目描述:

输入描述:

输出描述:

输入样例:

输出样例:

本人AC代码:

#include<bits/stdc++.h>
using namespace std;

struct TreeNode{
    int val;
    vector<TreeNode*> son;
    TreeNode(int x):val(x),son({}){}
};

void sortByVal(TreeNode* root){
    int n=root->son.size();
    for(int i=0;i<n-1;i++){
        int loc=i;
        for(int j=i;j<n;j++){
            if(root->son[j]>root->son[loc]){
                loc=j;
            }
        }
        swap(root->son[i],root->son[loc]);
    }
}

void dfs(TreeNode* root,vector<vector<int>>& ans,vector<int> an,int target){
    an.push_back(root->val);
    target-=root->val;
    int n=root->son.size();
    if(n==0&&target==0) ans.push_back(an);
    else{
        for(int i=0;i<n;i++){
            dfs(root->son[i],ans,an,target);
        }
    }
}

int main(){
    int target;
    int n;
    int ran;
    cin>>n>>ran>>target;
    vector<TreeNode*> nodes(n);
    for(int i=0;i<n;i++){
        int val;
        cin>>val;
        TreeNode* node=new TreeNode(val);
        nodes[i]=node;
    }
    for(int i=0;i<ran;i++){
        int ser;
        int num;
        cin>>ser>>num;
        for(int i=0;i<num;i++){
            int sonser;
            cin>>sonser;
            nodes[ser]->son.push_back(nodes[sonser]);
        }
        sortByVal(nodes[ser]);
    }
    vector<vector<int>> ans;
    vector<int> an;
    dfs(nodes[0],ans,an,target);
    int m=ans.size();
    for(int i=0;i<m;i++){
        int k=ans[i].size();
        for(int j=0;j<k;j++){
            cout<<ans[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}
举报

相关推荐

0 条评论