- Keda的研学
code
- @ 2026-2-6 11:39:49
struct Node {
int x, y;
ll d;
bool operator< (const Node &t) const {
return d > t.d;
}
};
void solve() {
ll n, A, B, C;
cin >> n >> A >> B >> C;
vector e(n + 1, vector<int>(n + 1));
for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) cin >> e[i][j];
const ll inf = 1e18;
vector d(2, vector<ll>(n + 1, inf)); d[0][1] = 0;
priority_queue<Node> q;
q.push({0, 1, 0});
vector visi(2, vector(n + 1, false));
while (q.size()) {
auto [x, y, D] = q.top(); q.pop();
if (visi[x][y]) continue;
visi[x][y] = 1;
for (int ny = 1; ny <= n; ny++) {
ll w = x == 0 ? A * e[y][ny] : B * e[y][ny] + C;
if (d[x][ny] > d[x][y] + w) {
d[x][ny] = d[x][y] + w;
q.push({x, ny, d[x][ny]});
}
}
if (x == 0) {
if (d[1][y] > d[0][y]) {
d[1][y] = d[0][y];
q.push({1, y, d[1][y]});
}
}
}
cout << d[1][n] << '\n';
}
0 条评论
目前还没有评论...
信息
- ID
- 421
- 时间
- ms
- 内存
- MiB
- 难度
- 5
- 标签
- 递交数
- 29
- 已通过
- 13
- 上传者