1053. Path of Equal Weight (30)

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int s, w[110], vis[110];
vector<int> v[110], path;

void printpath()
{
	int size = path.size(), i;
	for(i = 0; i < size; i++)
	{
		if(i > 0)
		{
			printf(" ");
		}

		printf("%d", w[path[i]]);
	}

	printf("\n");
}

void dfs(int cur, int curw)
{
	int size = v[cur].size();
	if(size == 0 && curw == s)
	{
		printpath();
		return;
	}

	int i, next, nextw;
	for(i = 0; i < size; i++)
	{
		next = v[cur][i];
		nextw = curw + w[next];

		if(vis[next] == 0 && nextw <= s)
		{
			vis[next] = 1;
			path.push_back(next);

			dfs(next, nextw);

			vis[next] = 0;
			path.pop_back();
		}
	}
}

int cmp(int a, int b)
{
	return w[a] > w[b];
}

int main()
{
	int n, m;
	scanf("%d%d%d", &n, &m, &s);

	int i;
	for(i = 0; i < n; i++)
	{
		scanf("%d", &w[i]);
	}

	int root, k, next, j;
	for(i = 1; i <= m; i++)
	{
		scanf("%d%d", &root, &k);

		for(j = 1; j <= k; j++)
		{
			scanf("%d", &next);
			v[root].push_back(next);
		}

		sort(v[root].begin(), v[root].end(), cmp);
	}

	vis[0] = 1;
	path.push_back(0);

	dfs(0, w[0]);

	system("pause");
	return 0;
}

 

posted on 2025-11-23 17:09  王景迁  阅读(3)  评论(0)    收藏  举报

导航