1⃣️如果将一个double类型的数按照%d输出,会输出随机的大数字
2⃣️测试点错误是因为最开始min的值不够大,这道题默认了根节点是0
#include<iostream>
#include<vector>
using namespace std;
int N,isexist[100001]={
0},start,num=0;
double p,r,min1=99999999;
struct node{
vector<int> child;
}n[100001];
void dfs(int root,double price)
{
if(root!=start)
price=price*(1+r/100);
if(price==min1&&n[root].child.size()==0)
num++;
if(price<min1&&n[root].child.size()==0) //注意二者顺序不可颠倒,否则赋值结束后二者肯定相等,答案会多1
{
min1=price;
num=1;
}
for(int i=0;i<n[root].child.size();i++)
dfs(n[root].child[i],price);
}
int main()
{
cin>>N>>p>>r;
for(int i=0;i<N;i++)
{
int temp;
cin>>temp;
if(temp!=0)
{
for(int j=0;j<temp;j++)
{
int t;
cin>>t;
n[i].child.push_back(t);
isexist[t]=1;
}
}
}
for(start=0;isexist[start];start++);
dfs(start,p);
printf("%.4lf %d",min1,num);
return 0;
}