BFS, with recursive words will segment error, use vector, variable idx record the next layer of the starting point
AC Code:
#include <vector>#include<cstdio>#include<map>using namespacestd;/*void BFs (vector<vector<int>>& g,vector<int> currentlayer,double p,double r,map<int,int >& amount,double& sum,double& r0) {vector<int> next; for (int i = 0;i < Currentlayer.size (); i++) {if (g[currentlayer[i]].size () = = 0) {sum + = p * R * Amount [Currentlayer[i]]; } else{for (int j = 0;j < G[currentlayer[i]].size (); j + +) {Next.push_back (G[currentlaye R[I]][J]); }}} if (Next.size ()! = 0) BFs (g,next,p,r* (1+r0), amount,sum,r0);}*/intMain () {intN; DoubleP,r; scanf ("%d%lf%lf",&n,&p,&R); R/=100.0; Vector<vector<int>>g (n); Map<int,int>amount; for(inti =0; I < n;i++){ intK; scanf ("%d",&k); if(k = =0) {scanf ("%d",&Amount[i]); } Else{ for(intj =0; J < k;j++){ intSon; scanf ("%d",&son); G[i].push_back (son); } } } DoubleSum0.0); Vector<int>Currentlayer; Currentlayer.push_back (0); //BFS (g,currentlayer,p,1,amount,sum,r);vector<int>v; intIdx0); DoubleRp1); V.push_back (0); while(true){ intNextID (V.size ()); BOOLFlagfalse); for(inti = Idx;i < nextid;i++){ if(g[v[i]].size () = =0) {sum+ = p * RP *Amount[v[i]]; } Else{flag=true; for(intj =0; J < G[v[i]].size (); j + +) {v.push_back (g[v[i]][j]); }}} RP*= (1+R); if(!flag) Break; IDX=NextID; } printf ("%.1lf\n", sum); return 0;}
1079 total sales of supply chain