0
点赞
收藏
分享

微信扫一扫

PAT 1053 麻烦问一下最后一个测试点怎么通过

夏沐沐 2022-02-11 阅读 62

#include<iostream>

#include<cstdio>

#include<cstring>

#include<vector>

#include<map>

#include<algorithm>

#include<queue>

#include<cmath>

#include<stack>

using namespace std;

const int maxn = 200;

int n,m,s;

struct node

{

    int weight;

    vector<int>child;

};

node nd[maxn];

int path[maxn];

bool cmp(int a,int b)

{

    return nd[a].weight>nd[b].weight;

}

void dfs(int index, int numnode,int sum)

{

    if(sum>s)return;

    if(sum==s)

    {

     if(nd[index].child.size()!=0) return;

        printf("%d",nd[path[0]].weight);

     for(int i=1;i<numnode;i++)

     {

         printf(" %d",nd[path[i]].weight);

         

      

     }

        printf("\n");

     return;

    }

    for(int i=0;i<nd[index].child.size();i++)

    {

     int id = nd[index].child[i];

     path[numnode]=id;

     dfs(id,numnode+1,sum+nd[id].weight);

    }

    

}

int main()

{

    cin>>n>>m>>s;

    for(int i=0;i<n;i++)

    {

     cin>>nd[i].weight;

    }

    for(int i=0;i<m;i++)

    {

     int x,num;

     cin>>x>>num;

     for(int j=0;j<num;j++)

     {

      int y;

      cin>>y;

      //这里问题,0相当于00在int里吗

      nd[x].child.push_back(y);

     }

     sort(nd[x].child.begin(),nd[x].child.end(),cmp);

    }

    path[0]=0;

    dfs(0,1,nd[0].weight);

return 0;

}

举报

相关推荐

0 条评论