不求AC 只求无WA
查看原帖
不求AC 只求无WA
637788
kimi0705楼主2023/9/30 11:53
#include <bits/stdc++.h>
using namespace std;
int n, m, k, x, y;
unsigned long long ans;
unsigned long long Q[2501];
int Map[2501][2501];
int read() {
    int f = 1, ans = 0;
    char ch = getchar();
    while(ch < '0' || '9' < ch) 
        ch = getchar(), ch == '-' ? f = -1 : 0;
    while('0' <= ch && ch <= '9') ans = ans * 10 + ch - '0', ch = getchar();
    return f * ans;
}
int main() {
    n = read(), m = read(), k = read(), ++k;
    for (int i(2); i <= n; ++i) Q[i] = read();
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) 
            Map[i][j] = 100;
        Map[i][i] = 0; 
    }
    for (int i(1); i <= m; ++i) x = read(), y = read(), Map[x][y] = Map[y][x] = 1;
    for (int l(1); l <= n; ++l)
        for (int i(1); i <= n; ++i)
            for (int j(1); j <= n; ++j) 
                    if(Map[i][l] + Map[l][j] < Map[i][j])
                        Map[i][j] = Map[j][i] = Map[i][l] + Map[l][j];
    for (int i(2); i <= n; ++i) {
        for (int j(2); j <= n; ++j) {
            if(i - j)
                for (int q(2); q <= n; ++q) {
                    if(i - q && j - q) 
                        for (int p(2); p <= n; ++p) {
                            if(i - p && j - p && q - p) 
                                if(Map[1][i] <= k && Map[i][j] <= k && Map[j][q] <= k && Map[q][p] <= k && Map[p][1] <= k) {
                                    ans = max(ans, Q[i] + Q[j] + Q[q] + Q[p]);
                                }
                        }
                }
        }
    }
    printf("%lld", ans);
    return 0;
}
2023/9/30 11:53
加载中...