80分求助!!#4 WA dfs暴力求解,样例正确,不知道哪错
查看原帖
80分求助!!#4 WA dfs暴力求解,样例正确,不知道哪错
541523
__CuSO4__楼主2023/1/14 19:52

代码:

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

int n, w[1005], l[1005], r[1005];
long long minn = 1e18;
int xx[1005][1005];
bool flag[1005];
vector<int> a[1005];

void dfs(int x, int start, int step)
{
	flag[x] = true;
	xx[x][start] = step;
	xx[start][x] = step;
	for (int i = 0; i < a[x].size(); i++)
	{
		if (flag[a[x][i]] == false)
		{
			dfs(a[x][i], start, step + 1);
		}
	}
}



int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> w[i] >> l[i] >> r[i];
		a[i].push_back(l[i]);
		a[l[i]].push_back(i);
		a[i].push_back(r[i]);
		a[r[i]].push_back(i);
	}
	for (int i = 1; i <= n; i++)
	{
		memset(flag, 0, sizeof(flag));
		dfs(i, i, 0);
	}
	for (int i = 1; i <= n; i++)
	{
		long long sum = 0;
		for (int j = 1; j <= n; j++)
			sum += xx[i][j] * w[j];
		//cout << "sum" << i << ":" << sum << endl;
		minn = min(minn, sum);
	}
	// for (int i = 1; i <= n; i++)
	// {
	// 	printf("xx[%d] = {", i);
	// 	for (int j = 1; j <= n; j++)
	// 	{
	// 		printf("%d", xx[i][j]);
	// 		if (j != n) cout << ", ";
	// 	}
	// 	cout << "}" << endl;
	// }
	cout << minn << endl;
	return 0;
}

测试数据:

50
1 2 3
4 0 0
87 4 5
21 0 0
28 6 7
68 0 0
32 8 9
17 0 0
38 10 11
43 0 0
9 12 13
48 0 0
8 14 15
85 0 0
6 16 17
30 0 0
92 18 19
37 0 0
78 20 21
33 0 0
70 22 23
85 0 0
72 24 25
31 0 0
17 26 27
33 0 0
47 28 29
25 0 0
83 30 31
28 0 0
49 32 33
15 0 0
88 34 35
29 0 0
78 36 37
98 0 0
50 38 39
89 0 0
83 40 41
3 0 0
15 42 43
15 0 0
51 44 45
3 0 0
60 46 47
1 0 0
78 48 49
66 0 0
78 50 0
71 0 0

自己的输出:

18105

注释掉了调试的代码,可以自己打开

2023/1/14 19:52
加载中...