题目难度:两颗星
题目大意:给出每个节点的子节点的序号,然后求出类似于带权路径的感觉。具体的题目不赘述。
题目坑点:题目其实就是dfs,bfs的话貌似也是可以的吧,看自己习惯啦,刚开始题目看错了,看漏了一行,差点没崩溃。。。呜呜呜。。。心情不好,但是还得刷题。加油哦 还有四题今天就结束了哦
代码如下:
#include<iostream>
#include<stdlib.h>
#include<queue>
#include<stack>
#include<algorithm>
#include<map>
#include<cmath>
using namespace std;
typedef struct Node{
Node(){
product=0;isLeaf=0;
}
int isLeaf;
double product;
vector<int> son;
}Node;
Node node[100100];
int N;
double price,rate,res=0;
void DFS(int n,int depth){
if(node[n].isLeaf==1){
res+=pow(1+rate/100,depth)*node[n].product;
}
else{
for(int i=0;i<node[n].son.size();i++){
DFS(node[n].son[i],depth+1);
}
}
}
int main(){
cin>>N>>price>>rate;
for(int i=0;i<N;i++){
int num,temp;
double pro;
cin>>num;
if(num==0){
cin>>pro;
node[i].isLeaf=1;
node[i].product=pro;
}
else{
for(int j=0;j<num;j++){
cin>>temp;
node[i].son.push_back(temp);
}
}
}
DFS(0,0);
printf("%lf",res*price);
}