PTA 功夫传人 (DFS)

L2-020 功夫传人 (25 分)

分析:

用vector来储存徒弟的序号,从而实现搜索。

代码:

#include <bits/stdc++.h>
using namespace std;

vector <int> v[100007];
double sum = 0, de;
int arr[100007] = {
    
     0 };

void dfs(int a, double score)
{
    
    
	if (!v[a].size())
	{
    
    
		sum += score*arr[a];
		return;
	}
	else
	{
    
    
		for (int i = 0; i<v[a].size(); i++)
		{
    
    
			dfs(v[a][i], score*(1 - de / 100));
		}
	}
}

int main()
{
    
    
	double sou;
	int n;
	scanf("%d%lf%lf", &n, &sou, &de);
	for (int i = 0; i<n; i++)
	{
    
    
		int m;
		scanf("%d", &m);
		if (m == 0)scanf("%d", &arr[i]);
		else
		{
    
    
			for (int j = 0; j<m; j++)
			{
    
    
				int temp;
				scanf("%d", &temp);
				v[i].push_back(temp);
			}
		}
	}
	dfs(0, sou);

	printf("%lld", (long long)sum);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43700916/article/details/88428841