PTAカンフー後継者(DFS)

L2-020カンフー相続(25ポイント)

分析:

検索を実現するために、ベクターを使用して見習いのシリアル番号を保存します。

コード:

#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