蒟蒻求助,自己电脑上答案是对的,提交了只读取0
查看原帖
蒟蒻求助,自己电脑上答案是对的,提交了只读取0
1290335
why2004楼主2024/4/13 17:09
// 医院设置
//各点权值,路径乘积之和最小
#include <iostream>
#include <vector>
#include <queue>
#include <climits>
#include <algorithm>
using namespace std;
typedef long long ll;

int const N = 1200;
int wal[N];
ll fa[N];
ll ans=9999999999;
vector<int>mp[N];
int n;
void dijistra(int s) {
	queue<int>q1;
	queue<int>q2;
	int vis[N];
	vis[s] = 1;
	int dis = 1;
	q1.push(s);
	while (!q1.empty()) {
		int temp = q1.front();
		q1.pop();
		for (auto it : mp[temp]) { 
			if (vis[it]!=1) {
				q2.push(it);
				vis[it] = 1;
				fa[s] =fa[s] + (dis * wal[it]);
			}
		}
		dis++;
		while (!q2.empty()) {
			int temp2 = q2.front();
			q2.pop();
			for (auto it : mp[temp2]) {
				if (vis[it]!=1) {
					vis[it] = 1;
					q1.push(it);
					fa[s] += (dis * wal[it]);
				}
			}
		}
	}
}

int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++) {
		int l, r;
		cin >> wal[i] >> l >> r;
		if (l != 0) {
			mp[i].push_back(l);
			mp[l].push_back(i);
		}
		if (r != 0) {
			mp[i].push_back(r);
			mp[r].push_back(i);
		}
	}
	for (int i = 1; i <= n; i++) {
		dijistra(i);
		ans = min(ans, fa[i]);
	}
	cout << ans;
	return 0;
}
2024/4/13 17:09
加载中...