当前位置: 代码迷 >> 综合 >> PAT 甲级 1053 PAT Ranking 个人错误总结
  详细解决方案

PAT 甲级 1053 PAT Ranking 个人错误总结

热度:51   发布时间:2024-02-12 03:55:51.0

一个最最基本的dfs问题

#include<bits/stdc++.h>
using namespace std;
struct node{int w;vector<int>child;
}t[100];
int s;
int sum=0;
vector<int>ans;
vector<vector<int> >q;
void dfs(int root){for(int i=0;i<t[root].child.size();i++){sum+=t[t[root].child[i]].w;ans.push_back(t[root].child[i]);dfs(t[root].child[i]);ans.pop_back();sum-=t[t[root].child[i]].w;}if(sum==s&&t[root].child.size()==0){q.push_back(ans);}
}
bool cmp(vector<int> a,vector<int> b){for(int i=1;i<min(a.size(),b.size());i++){if(a[i]!=b[i])return t[a[i]].w>t[b[i]].w;}
}
int main(){int n,m;cin>>n>>m>>s;for(int i=0;i<n;i++){cin>>t[i].w;}int temp,k,a;for(int i=0;i<m;i++){cin>>temp>>k;for(int j=0;j<k;j++){cin>>a;t[temp].child.push_back(a);}}int root=0;ans.push_back(root);sum+=t[root].w;dfs(root);sort(q.begin(),q.end(),cmp);for(int i=0;i<q.size();i++){for(int j=0;j<q[i].size();j++){printf("%d",t[q[i][j]].w);if(j!=q[i].size()-1)printf(" ");}printf("\n");}return 0;
}