题目见https://www.patest.cn/contests/pat-a-practise/1106
有点类似邻接表,只不过边表采用队列的形式,然后就是在遍历的过程中递归啦
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 100005
typedef struct{
int front,rear;
int *q;
}AdjList;
AdjList aL[N];
int n,lRetailer,lDeep=N;
double p,r;
void Read(){
int i,a;
scanf("%d%lf%lf",&n,&p,&r);
for(i=0;i<n;i++){
scanf("%d",&a);
aL[i].front = aL[i].rear = 0;
if(a){
aL[i].q = (int *)malloc(sizeof(int)*a);
while(a--){
scanf("%d",&(aL[i].q[aL[i].rear]));
aL[i].rear ++;
}
}
}
}
void Solve(int root, int deep){
int i;
int *tmpQ = aL[root].q;
if(!aL[root].rear){
if(deep<lDeep){
lDeep = deep;
lRetailer = 1;
}
else if(deep==lDeep) lRetailer ++;
return;
}
for(i=aL[root].front;i<aL[root].rear;i++)
Solve(tmpQ[i],deep+1);
}
int main(){
// freopen("Data.txt","r",stdin);
Read();
Solve(0,0);
printf("%.4lf %d\n",p*pow(r/100+1,lDeep),lRetailer);
return 0;
}