玄关!遇到玄学问题请大佬解答
查看原帖
玄关!遇到玄学问题请大佬解答
999658
talkwithcpp楼主2024/8/31 17:46

正确

#include<iostream>
#include<cstring>
using namespace std;

int n, ans=0x7fffffff;
int dis[110][110], k[110];
int main()
{
	ios::sync_with_stdio(0), cin.tie(0);
	memset(dis, 0x3f, sizeof(dis));

	cin >> n;
	int l, r;
	for (int i = 1; i <= n; ++i)
	{
		cin >> k[i] >> l >> r;
		if (l != 0) dis[i][l] = dis[l][i] = 1;
		if (r != 0) dis[i][r] = dis[r][i] = 1;
	}
	for (int i = 1; i <= n; ++i) dis[i][i] = 0;

	for (int k = 1; k <= n; ++k)
		for (int i = 1; i <= n; ++i)
			for (int j = 1; j <= n; ++j)
				if (k != i && i != j && j != k)
					dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);

	for (int i = 1; i <= n; ++i)
	{
		int sum = 0;
		for (int j = 1; j <= n; ++j)
			sum += dis[i][j] * k[j];
		ans = min(ans, sum);
		sum = 0;
	}

	cout << ans;
	return 0;
}

连样例过不了的

#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
int n, m, u, v, s;
//int map[200][200];
int dis[200][200];
int main()
{
	ios::sync_with_stdio(0), cin.tie(0);
	//memset(map, 0x7f, sizeof(map));
	memset(dis, 0x7f, sizeof(dis));
	for (int i = 1; i <= n; ++i) dis[i][i] = 0;

	cin >> n >> m;
	for (int i = 1; i <= m; ++i)
	{
		cin >> u >> v >> s;
		//map[v][u] = map[u][v] = s;
		dis[v][u] = dis[u][v] = min(dis[u][v], s);
	}

	for (int k = 1; k <= n; ++k)
		for (int i = 1; i <= n; ++i)
			for (int j = 1; j <= n; ++j)
				if (i != k && k != j && j != i)
					dis[i][j] = min((ll)dis[i][j], (ll)dis[i][k] + dis[k][j]);

	for (int i = 1; i <= n; ++i)
	{
		for (int j = 1; j <= n; ++j)
			cout << (dis[i][j] == 2139062143 ? 0 : dis[i][j]) << ' ';
		cout << endl;
	}
	return 0;
}

仅仅就把dis[i][i]=0换到下面就不行了

2024/8/31 17:46
加载中...