比赛 |
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;
}