WA%92求助QAQ
查看原帖
WA%92求助QAQ
1010547
____TAT____楼主2023/12/13 18:34
#include <iostream>
#include <cstring>
#define INF 0x3f3f3f3f
using namespace std;
int a[110][110], dp[110];
int country[110][110];
int culture[110];
bool f[110];
int n, m, k, s, t;
inline int read(){
    int f = 1, x = 0;
    char c = getchar();
    while (c < '0' || c > '9'){
        if (c == '-')
            f = -f;
        c = getchar();
    }
    while (c >= '0' && c <= '9')
        x = x * 10 + c - '0', c = getchar();
    return f * x;
}
inline void write(int x){ // 快写
    if (x < 0)
        putchar('-'), x = -x;
    if (x > 9)
        write(x / 10);
    putchar(x % 10 + 48);
}
void dijkstra(){
    for(int i = 1; i <= n; i++){
        int mi = -1;
        for(int j = 1; j <= n; j++){
            if((mi == -1 || dp[j] < dp[mi]) && !f[j]){
                mi = j;
            }
        }
        f[mi] = 1;
        for(int j = 1; j <= n; j++){
            if(!f[j] && dp[mi] + a[mi][j] < dp[j] && a[mi][j] != 0){
                dp[j] = dp[mi] + a[mi][j];
            }
        }
    }
}
int main(){
    n = read();
    k = read();
    m = read();
    s = read();
    t = read();
    for (int i = 1; i <= n; i++){
        culture[i] = read();
    }
    int x;
    for (int i = 1; i <= k; i++){
        for (int j = 1; j <= k; j++){
            x = read();
            if (x == 1){
                country[j][i] = 1;
            }
        }
    }
    int u, v, l;
    for (int i = 1; i <= m; i++)
    {
        cin >> u >> v >> l;
        if(country[culture[u]][culture[v]] == 0 && culture[u] != culture[v]){
            a[v][u] = l;
            a[u][v] = l;
        }
    }
    if (country[culture[s]][culture[t]] || culture[s] == culture[t] ){
        cout << -1;
        return 0;
    }
    memset(dp, 0x3f, sizeof(dp));
    dp[s] = 0;
    dijkstra();
    if(dp[t] != INF){
        write(dp[t]);
    }
    return 0;
}
2023/12/13 18:34
加载中...