#include<iostream>#include<vector>using namespace std;int N;//結(jié)點(diǎn)數(shù)double price, r, sum = 0;//分別為價(jià)格, 比率, 總價(jià)vector<int> pro;//存儲(chǔ)葉子結(jié)點(diǎn)的產(chǎn)品數(shù)量vector< vector<int> > G;//圖的鄰接表表示void dfs(int sn, double price);//dfs遞歸,第一個(gè)參數(shù)是根結(jié)點(diǎn)int main(void){ //freopen("in.txt", "r", stdin); scanf("%d %lf %lf", &N, &price, &r); pro.resize(N, 0); G.resize(N); for (int i = 0; i < N; i++)//讀入數(shù)據(jù) { int cnt; scanf("%d", &cnt); if (cnt == 0) scanf("%d", &pro[i]);//存儲(chǔ)該結(jié)點(diǎn)的產(chǎn)品數(shù)量 else { for (int j = 0; j < cnt; j++) { int id; scanf("%d", &id); G[i].push_back(id); } } } dfs(0, price);//遞歸 printf("%.1lf/n", sum); return 0;}void dfs(int sn, double price){ if (G[sn].empty())//表示葉子結(jié)點(diǎn) { double tem = pro[sn] * price;//累計(jì)價(jià)錢 sum += tem; return; } price *= (1 + r / 100.0); for (int i = 0; i < G[sn].size(); i++)//遞歸下一層 dfs(G[sn][i], price); return;}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注