1053. Path of Equal Weight (30)

来源:互联网 发布:修改mysql的端口 编辑:程序博客网 时间:2024/06/18 00:50

DFS遍历,顺便记录前驱路径,注意排序问题即可。

#include <iostream>#include <stdio.h>#include <string.h>#include <vector>#include <map>#include <stack>#include <queue>#include <algorithm>#include <set>using namespace std;struct Node{    int w;    vector<int> child;};int n,m,s,cnt,pre[100];vector<Node> Tree(100);vector<int> ans[100];bool cmp (const vector<int>&a,const vector<int>& b){    for(int i=0;i<min(a.size(),b.size());i++){        if(a[i]==b[i]) continue;        return a[i]>b[i];    }    return false;}void dfs(int v,int sum,int deep){    sum+=Tree[v].w;    pre[deep]=Tree[v].w;    if(Tree[v].child.size()==0&&sum==s){        for(int i=0;i<=deep;i++)            ans[cnt].push_back(pre[i]);        cnt++;    }    for(int i=0;i<Tree[v].child.size();i++)        dfs(Tree[v].child[i],sum,deep+1);}int main(){    //freopen("E://PAT/input.txt", "r", stdin);    scanf("%d %d %d",&n,&m,&s);    for(int i=0;i<n;i++) scanf("%d",&Tree[i].w);    for(int i=0;i<m;i++){        int x,y;        scanf("%d %d",&x,&y);        while(y--){            int t;scanf("%d",&t);            Tree[x].child.push_back(t);        }    }    dfs(0,0,0); //参数 1当前遍历点 2当前权值 3当前遍历深度    sort(ans,ans+cnt,cmp);    for(int i=0;i<cnt;i++){        for(int j=0;j<ans[i].size();j++){            if(j) printf(" ");            printf("%d",ans[i][j]);        }        printf("\n");    }    return 0;}


0 0