80tp求调
查看原帖
80tp求调
421904
FireFly_Lightning楼主2025/8/30 11:05
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e3 + 7;
int d, dis[N], used[N];
int co[N][N], dp[N];
int n, m, k, e, cl[N][N];
int g[N][N], sum[N][N];
queue<int> q;
void spfa(int l, int r) {
    while (!q.empty()) q.pop();
    memset(dis, 0x7f, sizeof(dis));
    memset(used, 0 ,sizeof(used));
    q.push(1);
    dis[1] = 0;
    used[1] = 1;
    while (!q.empty()) {
        int u = q.front();
        q.pop();
        used[u] = 0;
        for (int v = 1; v <= m; v++) {
            if (g[u][v] == -1) continue;
            if (sum[v][r] - sum[v][l - 1] != 0) continue;
            if (dis[v] > dis[u] + g[u][v]) {
                dis[v] = dis[u] + g[u][v];
                if (used[v] == 0) {
                    used[v] = 1;
                    q.push(v);
                }
            }
        }
    }
    return ;
}
signed main() {
    memset(g, -1, sizeof(g));
    cin >> n >> m >> k >> e;
    for (int i = 1; i <= e; i++) {
        int x, y, z;
        cin >> x >> y >> z;
        if (g[x][y] == -1 || g[x][y] < z) g[x][y] = z, g[y][x] = z;
    }
    cin >> d;
    for (int i = 1; i <= d; i++) {
        int t, x, y;
        cin >> t >> x >> y;
        for (int j = x; j <= y; j++)  cl[t][j] = 1;
    }
    memset(sum, 0, sizeof(sum));
    for (int i = 1; i <= m; i++){
        for (int j = 1; j <= n; j++) {
            sum[i][j] = sum[i][j - 1] + cl[i][j];
        }
    } 
    for (int i = 1; i <= n; i++) {
        for (int j = i; j <= n; j++) {
            spfa(i, j);
            co[i][j] = dis[m];
        }
    }
    memset(dp, 0x7f, sizeof(dp));
    for (int i = 1; i <= n; i++) {
        dp[i] = co[1][i] * i;
        for (int j = i - 1; j >= 0; j--) {
            dp[i] = min(dp[i], dp[j] + co[j + 1][i] * (i - j) + k);
        }
    }
    cout << dp[n];
    return 0;
}

请指出哪一行错了,谢谢

2025/8/30 11:05
加载中...