zoukankan      html  css  js  c++  java
  • 树的遍历——A1053.Path of Equal Weight(30) 只可DFS不可BFS

    #include <bits/stdc++.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <queue>
    using namespace std;
    const int MAXN = 110;
    struct Node{
        int weight;
        vector<int> child;
    }Node[MAXN];
    bool cmp(int a,int b){
        return Node[a].weight > Node[b].weight;
    }
    int n,m,S;//结点数,边数及给定的和
    int path[MAXN];//记录路径
    void DFS(int index,int numNode,int sum){
        if(sum > S){
            return;
        }
        if(sum == S){
            if(Node[index].child.size() != 0){
                return;
            }
            for(int i=0;i<numNode;++i){
                printf("%d",Node[path[i]].weight);
                if(i < numNode-1){
                    printf(" ");
                }else{
                    printf("
    ");
                }
            }
            return;
        }
        for(int i=0;i<Node[index].child.size();++i){
            int child = Node[index].child[i];
            path[numNode] = child;
            DFS(child,numNode+1,sum + Node[child].weight);
        }
    }
    int main(){
        scanf("%d%d%d",&n,&m,&S);
        for(int i=0;i<n;++i){
            scanf("%d",&Node[i].weight);
        }
        int id,k,child;
        for(int i=0;i<m;++i){
            scanf("%d%d",&id,&k);
            for(int j=0;j<k;++j){
                scanf("%d",&child);
                Node[id].child.push_back(child);
            }
            sort(Node[id].child.begin(),Node[id].child.end(),cmp);
        }
        path[0] = 0;//路径的第一个节点设置为0号节点
        DFS(0,1,Node[0].weight);
        system("pause");
        return 0;
    }
  • 相关阅读:
    SPOJ LCS2
    SPOJ NSUBSTR
    1977: [BeiJing2010组队]次小生成树 Tree
    2002: [Hnoi2010]Bounce 弹飞绵羊
    P3690 【模板】Link Cut Tree (动态树)
    P2093 [国家集训队]JZPFAR
    2648: SJY摆棋子
    HDU 2966 In case of failure
    bzoj 一些题目汇总
    BZOJ3653谈笑风生——可持久化线段树+dfs序
  • 原文地址:https://www.cnblogs.com/JasonPeng1/p/12237200.html
Copyright © 2011-2022 走看看