比赛 2022级DP专题练习赛2 评测结果 AAAAAAAAAA
题目名称 物流运输 最终得分 100
用户昵称 HeSn 运行时间 0.008 s
代码语言 C++ 内存使用 1.17 MiB
提交时间 2023-02-13 20:35:43
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define int long long
int k, n, p, m, d, g[110][30], dis[30], vis[30], cost[110][110], vis1[30], f[110];
vector<int> cd[30], w[30];
void spfa() {
	queue<int> q;
//	memset(dis, 0x3f, sizeof(dis));
	memset(vis, 0, sizeof(vis));
	for(int i = 1; i <= n; i ++) {
		dis[i] = 1e8;
	} 
	dis[1] = 0;
	q.push(1);
	while(!q.empty()) {
		int x = q.front();
		q.pop();
		vis[x] = 0;
		for(int i = 0; i < cd[x].size(); i ++) {
			int u = cd[x][i];
			if(vis1[u]) {
				continue;
			}
			if(dis[u] > dis[x] + w[x][i]) {
				dis[u] = dis[x] + w[x][i];
				if(!vis[u]) {
					vis[u] = 1;
					q.push(u);
				}
			}
		}
	}
//	cout << dis[n] << endl;
//	for(int i = 1; i <= n; i ++) {
//		cout << dis[i] << ' ';
//	}
//	cout << endl;
}
signed main() {
	freopen("bzoj_1003.in", "r", stdin);
	freopen("bzoj_1003.out", "w", stdout);
	cin >> k >> n >> p >> m;
	for(int i = 1; i <= m; i ++) {
		int x, y, z;
		cin >> x >> y >> z;
		cd[x].push_back(y);
		w[x].push_back(z);
		cd[y].push_back(x);
		w[y].push_back(z);
	}
	cin >> d;
	for(int i = 1; i <= d; i ++) {
		int q, x, y;
		cin >> q >> x >> y;
		for(int j = x; j <= y; j ++) {
			g[j][q] = 1;
		}
	}
//	for(int j = 1; j <= k; j ++) {
//		for(int i = 1; i <= k; i ++) {
//			cout << g[i][j] << ' ';
//		}
//		cout << endl;
//	}
	for(int i = 1; i <= k; i ++) {
		for(int j = 1; j <= k; j ++) {
			memset(vis1, 0, sizeof(vis1));
			for(int i1 = i; i1 <= j; i1 ++) {
				for(int l = 1; l <= n; l ++) {
					if(g[i1][l]) {
						vis1[l] = 1;
					}
				}
			}
			spfa();
			cost[i][j] = dis[n];
		}
	}
	memset(f, 0x3f, sizeof(f));
	for(int i = 1; i <= k; i ++) {
		f[i] = cost[1][i] * i;
		for(int j = i - 1; j >= 0; j --) {
			f[i] = min(f[i], f[j] + cost[j + 1][i] * (i - j) + p);
		}
	}
	cout << f[k];
	return 0;
}