xyymyj
查看原帖
xyymyj
928270
Three_bodyIII楼主2024/7/10 10:03
#include<bits/stdc++.h>
#define fo(i, a, b) for(int i = a; i <= b; i ++)
using namespace std;
const int N = 3e2 + 1;
#define int long double
double n, m, v, e ,c[N], d[N], k[N], f[N][N][2], dep[N][N];
int read () {
	int num = 0, fs = 1;
	char ch = getchar();
	while((ch < '0' || ch > '9') && ch != '-')	ch = getchar();
	if(ch == '-')	fs = - 1, ch = getchar();
	while(ch >= '0' && ch <= '9')	num = num * 10 + ch - 48, ch = getchar();
	return num * fs;
}
signed main () {
	int n = read(), m = read(), v = read(), e = read();
	fo(i, 1, n) c[i] = read(); fo(i, 1, n) d[i] = read();
	fo(i, 1, n) k[i] = read();
	fo(i, 1, e) {
		int u = read(), v = read(), w = read();
		dep[u][v] = w;
	}
	fo(i, 1, n)
		fo(j, 1, n)
			dep[i][j] = 1e9;
	fo(i, 1, n)
		fo(j, 1, n)
			fo(k, 1, n)
				dep[j][k] = min(dep[j][k], dep[j][i] + dep[i][k]);
	fo(i, 1, n)
		fo(j, 0, m)
			f[i][j][0] = f[i][j][1] = 1e9;
	fo(j, 0, m)	f[0][j][0] = f[0][j][1] = 0; 
	fo(i, 1, n) 
		fo(j, 0, m) {
			f[i][j][0] = max(f[i - 1][j][0] + dep[c[i - 1]][c[i]], f[i - 1][j][1] + dep[d[i - 1]][c[i]]);
			if(j!=0)
        		f[i][j][1]=min(f[i-1][j-1][0]+dep[c[i-1]][d[i]]*k[i]+dep[c[i-1]][c[i]]*(1-k[i]),f[i-1][j-1][1]+dep[c[i-1]][c[i]]*(1-k[i-1])*(1-k[i])+dep[c[i-1]][d[i]]*(1-k[i-1])*k[i]+dep[d[i-1]][c[i]]*(1-k[i])*k[i-1]+dep[d[i-1]][d[i]]*k[i-1]*k[i]);
		}
	int ma = 1e9;
	fo(j, 0, m)	ma = min(ma,min(f[n][j][0], f[n][j][1]));
	cout << ma;
	return 0;
}
2024/7/10 10:03
加载中...