P2901 [USACO08MAR] Cow Jogging G (拓扑序+归并排序)
P2901 [USACO08MAR] Cow Jogging G
拓扑序+归并排序
容易看出图是有向无环图,考虑在拓扑序上维护每个点的
每个边都需要合并一次,复杂度
#include <bits/stdc++.h>
#define pii std::pair<int, int>
#define mk std::make_pair
#define fi first
#define se second
#define pb push_back
using i64 = long long;
using ull = unsigned long long;
const i64 iinf = 0x3f3f3f3f, linf = 0x3f3f3f3f3f3f3f3f;
const int N = 1e3 + 10;
int n, m, k;
std::vector<pii> e[N];
struct path {
int p[110];
} a[N];
int b[N], c[N], ret[N];
void merge() {
int bpos = 1, cpos = 1, rpos = 0;
memset(ret, 0x3f, sizeof(ret));
while(bpos <= k && cpos <= k) {
if(b[bpos] <= c[cpos]) ret[++rpos] = b[bpos++];
else ret[++rpos] = c[cpos++];
}
while(bpos <= k) ret[++rpos] = b[bpos++];
while(cpos <= k) ret[++rpos] = c[cpos++];
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin >> n >> m >> k;
for(int i = 1; i <= m; i++) {
int u, v, d;
std::cin >> u >> v >> d;
e[u].pb({v, d});
}
std::queue<int> q;
q.push(n);
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= k; j++) a[i].p[j] = iinf;
}
a[n].p[1] = 0;
for(int u = n; u >= 0; u--) {
for(auto x : e[u]) {
int v = x.fi, w = x.se;
bcnt = ccnt = 0;
for(int i = 1; i <= k; i++) b[i] = a[u].p[i] + w * (a[u].p[i] != iinf);
for(int i = 1; i <= k; i++) c[i] = a[v].p[i];
merge();
for(int i = 1; i <= k; i++) a[v].p[i] = ret[i];
}
}
for(int i = 1; i <= k; i++) {
std::cout << (a[1].p[i] != iinf ? a[1].p[i] : -1) << "\n";
}
return 0;
}
Buy me a cup of coffee ☕.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具