1053. Path of Equal Weight (30)

来源:互联网 发布:迅龙数据恢复怎么用 编辑:程序博客网 时间:2024/05/17 23:32

1053. Path of Equal Weight (30)

#include <iostream>#include <vector>using namespace std;class CA{public:struct arcnode{int arcid;arcnode *next;};struct treenode{int weight;arcnode *first;};vector<treenode> v;vector<int> possiblepath;int n,m,s;void run();void deepvisit(int k,int sum);};void CA::deepvisit(int k,int sum){if(v[k].first==NULL){if(sum+v[k].weight==s){int i;for(i=0;i<possiblepath.size();i++) cout<<v[possiblepath[i]].weight<<" ";cout<<v[k].weight<<endl;}return;}else{if(sum+v[k].weight>=s) return;}arcnode *arc=v[k].first;while(arc!=NULL){possiblepath.push_back(k);deepvisit(arc->arcid,sum+v[k].weight);possiblepath.pop_back();arc=arc->next;}}void CA::run(){cin>>n>>m>>s;v.resize(n);arcnode *arc,*arc1;int i,id,k,sum;for(i=0;i<n;i++){cin>>v[i].weight;v[i].first=NULL;}for(i=0;i<m;i++){cin>>id>>k;while(k-->0){arc =new arcnode;cin>>arc->arcid;if(v[id].first==NULL||v[arc->arcid].weight>=v[v[id].first->arcid].weight){arc->next=v[id].first;v[id].first=arc;}else{arc1=v[id].first;while(arc1->next!=NULL&&v[arc->arcid].weight<v[arc1->next->arcid].weight) arc1=arc1->next;arc->next=arc1->next;arc1->next=arc;}}}deepvisit(0,0);}int main(){//freopen("test.in","r",stdin);CA *a=new CA;a->run();return 0;}


原创粉丝点击