92第一个点WA求助
查看原帖
92第一个点WA求助
445650
I_never_left楼主2023/7/16 08:25
#include <bits/stdc++.h>

using namespace std;

typedef long long LL;

const int N = 10010;

int n;
int co[N];
int u, v, w;
LL a[N][N];
LL f[N], dis[N];
bool vis[N];

void D() {
	for(int i = 1; i <= n; ++ i) {
		int k = 1, minn = 0x7fffffff;
		for(int j = 1; j <= n; ++ j)
			if(!vis[j] && co[j] < minn) k = j, minn = co[j];
		vis[k] = 1;
		
		for(int j = 1; j <= n; ++ j)
			if(vis[j] && a[k][j] != -1) {
				if(dis[k] + dis[j] == dis[a[k][j]]) f[a[k][j]] += f[k] * f[j];
				if(dis[k] + dis[j] < dis[a[k][j]]) {
					f[a[k][j]] = f[k] * f[j];
					dis[a[k][j]] = dis[k] + dis[j];
				}
			}
	}
}

int main() {
	cin >> n;
	for(int i = 1; i <= n; ++ i) {
		cin >> co[i];
		dis[i] = co[i];
		f[i] = 1;
		for(int j = 1; j <= n; ++ j) a[i][j] = -1;
	}
	while(cin >> u >> v >> w && u != EOF) {
		a[u + 1][v + 1] = w + 1;
		a[v + 1][u + 1] = w + 1;
	}
	
	D();
	cout << dis[1] << ' ' << f[1];
}
2023/7/16 08:25
加载中...