P8906 [USACO22DEC] Breakdown P 题解
P8906 [USACO22DEC] Breakdown P 题解
显然的套路是删边转化为加边。
考虑到维护整条路径不好维护,于是考虑转化维护
我们先考虑
那么对于
容易一些的,我们首先考虑
对于
其实这道题的核心是想到如何处理
代码:
#include <bits/stdc++.h>
#define N 303
#define K 10
#define int long long
using namespace std;
int n, k;
int w[N][N];
struct node {
int x, y;
} e[N * N];
int mp[N][N];
int f[N][K];
int g[N][K];
int d[N][N];
void cm(int &x, int y) {
x = min(x, y);
}
int add(int x, int y) {
int ans = 1e18 + 1;
for (int ck = 0; ck <= 4; ck++)
for (int a = 1; a <= n; a++)
ans = min(ans, f[a][ck] + g[a][k - ck]);
mp[x][y] = 1;
for (int a = 1; a <= n; a++)
if (mp[y][a])
cm(d[x][a], w[x][y] + w[y][a]);
for (int a = 1; a <= n; a++)
if (mp[a][x])
cm(d[a][y], w[a][x] + w[x][y]);
for (int ck = 0; ck < 4; ck++)
cm(f[y][ck + 1], f[x][ck] + w[x][y]);
for (int ck = 0; ck < 4; ck++) {
for (int a = 1; a <= n; a++)
if (mp[y][a])
cm(f[a][ck + 1], f[y][ck] + w[y][a]);
for (int a = 1; a <= n; a++)
cm(f[a][ck + 2], f[y][ck] + d[y][a]);
}
if (x == 1) {
for (int a = 1; a <= n; a++)
for (int b = 1; b <= n; b++)
if (mp[a][b])
cm(f[b][4], f[a][3] + w[a][b]);
}
for (int ck = 0; ck < 4; ck++)
cm(g[x][ck + 1], g[y][ck] + w[x][y]);
for (int ck = 0; ck < 4; ck++) {
for (int a = 1; a <= n; a++)
if (mp[a][x])
cm(g[a][ck + 1], g[x][ck] + w[a][x]);
for (int a = 1; a <= n; a++)
cm(g[a][ck + 2], g[x][ck] + d[a][x]);
}
if (y == n) {
for (int a = 1; a <= n; a++)
for (int b = 1; b <= n; b++)
if (mp[b][a])
cm(g[b][4], g[a][3] + w[b][a]);
}
return ans >= 1e18 ? -1 : ans;
}
stack<int>q;
signed main() {
memset(f, 0x3f, sizeof f);
memset(g, 0x3f, sizeof g);
memset(d, 0x3f, sizeof d);
cin >> n >> k;
f[1][0] = g[n][0] = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
scanf("%lld", &w[i][j]);
for (int i = 1; i <= n * n; i++)
scanf("%lld%lld", &e[i].x, &e[i].y);
for (int i = n * n; i; i--)
q.push(add(e[i].x, e[i].y));
while (q.size())
cout << q.top() << "\n", q.pop();
return 0;
}
分类:
题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!