#include<bits/stdc++.h>#define For(i, l, r) for(register int i = (l), i##end = (int)(r); i <= i##end; ++i)#define Fordown(i, r, l) for(register int i = (r), i##end = (int)(l); i >= i##end; --i)#define Set(a, v) memset(a, v, sizeof(a))#define Cpy(a, b) memcpy(a, b, sizeof(a))#define debug(x) cout << #x << ": " << x << endl#define DEBUG(...) fprintf(stderr, __VA_ARGS__)#define fir first#define sec second#define mp make_pairusingnamespace std;
inlineboolchkmin(int &a, int b){return b < a ? a = b, 1 : 0;}
inlineboolchkmax(int &a, int b){return b > a ? a = b, 1 : 0;}
inlineintread(){
int x = 0, fh = 1; char ch = getchar();
for (; !isdigit(ch); ch = getchar()) if (ch == '-') fh = -1;
for (; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + (ch ^ 48);
return x * fh;
}
voidFile(){
#ifdef zjp_shadowfreopen ("2069.in", "r", stdin);
freopen ("2069.out", "w", stdout);
#endif}
constint N = 5010, M = 10100 * 2, inf = 0x7f7f7f7f;
int Head[N], Next[M], to[M], val[M], e = 0;
inlinevoidadd_edge(int u, int v, int w){ to[++ e] = v; Next[e] = Head[u]; Head[u] = e; val[e] = w; }
priority_queue<pair<int, int> > P;
int dis[N], S, T; bitset<N> vis;
intDijkstra(){
Set(dis, inf); dis[S] = 0; P.push(mp(0, S)); vis.reset();
while (!P.empty()) {
int u = P.top().sec; P.pop(); if (vis[u]) continue ; vis[u] = true;
for (int i = Head[u]; i; i = Next[i]) {
int v = to[i]; if (chkmin(dis[v], dis[u] + val[i])) P.push(mp(- dis[v], v));
}
}
return dis[T];
}
structEdge { int u, v, a, b; } lt[M];
int n, m;
voidRebuild(int cur, int flag){
Set(Head, 0); e = 0; S = 1; T = n + 1;
For (i, 1, m) {
int u = lt[i].u, v = lt[i].v, a = lt[i].a, b = lt[i].b;
if (u == 1) {
if ((v & cur) ^ flag) add_edge(S, v, a);
elseadd_edge(v, T, b);
} elseadd_edge(u, v, a), add_edge(v, u, b);
}
}
intmain(){
File();
n = read(); m = read();
For (i, 1, m) {
int u = read(), v = read(), a = read(), b = read();
if (u > v) swap(u, v), swap(a, b);
lt[i] = (Edge) {u, v, a, b};
}
int ans = inf;
for (int bit = 1; bit <= n; bit <<= 1) {
Rebuild(bit, 0), chkmin(ans, Dijkstra());
Rebuild(bit, bit), chkmin(ans, Dijkstra());
}
printf ("%d\n", ans);
return0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】