psn • 1年前
#include <cstdio>
#include <cstring>
using namespace std;
int n, m, q, x, y, d, mindis = 200000;
int vill[210][210], retime[220];
bool vied[220];
void dfs(int now, int total) {
if (now == y) {
if (total < mindis)
mindis = total;
return;
}
for (int i = 0; i < n; i++) {
if (!vied[i] && vill[now][i] >= 0 && i != now) {
vied[i] = true;
dfs(i, vill[now][i] + total);
vied[i] = false;
}
}
}
int main(void) {
memset(vill, -1, sizeof(vill));
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i++)
scanf("%d", &retime[i]);
for (int i = 0, a, b, c; i < m; i++) {
scanf("%d%d%d", &a, &b, &c);
vill[a][b] = c;
vill[b][a] = c;
}
scanf("%d", &q);
for (int i = 0; i < q; i++) {
scanf("%d%d%d", &x, &y, &d);
if (retime[x] > d || retime[y] > d) {
printf("-1\n");
} else {
for (int u = 0; u < n; u++)
if (retime[u] > d)
vied[u] = true;
dfs(x, 0);
for (int u = 0; u < n; u++)
vied[u] = false;
if (mindis == 200000) {
printf("-1\n");
mindis = 200000;
} else {
printf("%d\n", mindis);
mindis = 200000;
}
}
}
return 0;
}
评论:
请先登录,才能进行评论