当前位置: 首页 > news >正文

P2469 [SDOI2010] 星际竞速 - Link

考虑使用费用流。把一个点拆成两个,表示入和出,因为每个点要被恰好经过一次,所以每个点都应该是进一次,出一次,那么 \(s\) 向所有出点连边,费用为 \(0\),流量为 \(1\),所有入点向 \(t\) 连边,费用为 \(0\),流量为 \(1\)
然后把移动考虑进来。瞬移相当于直接进入某个点,所以 \(s\) 向所有入点连边,费用为瞬移的代价,流量为 \(1\)。对于一条边 \((u,v,w)\),编号小的出点向编号大的入点连边,费用为 \(w\),流量为 \(1\)
建完图,直接跑费用流即可。

代码

/*
Luogu P2469 [SDOI2010] 星际竞速
2026-03-25
*/
#include<bits/stdc++.h>
using namespace std;
namespace IO{template<typename T>inline void read(T&x){x=0;char c=getchar();bool f=0;while(!isdigit(c)) c=='-'?f=1:0,c=getchar();while(isdigit(c)) x=x*10+c-'0',c=getchar();f?x=-x:0;}template<typename T>inline void write(T x){if(x==0){putchar('0');return ;}x<0?x=-x,putchar('-'):0;short st[50],top=0;while(x) st[++top]=x%10,x/=10;while(top) putchar(st[top--]+'0');}inline void read(char&c){c=getchar();while(isspace(c)) c=getchar();}inline void write(char c){putchar(c);}inline void read(string&s){s.clear();char c;read(c);while(!isspace(c)&&~c) s+=c,c=getchar();}inline void write(string s){for(int i=0,len=s.size();i<len;i++) putchar(s[i]);}template<typename T>inline void write(T*x){while(*x) putchar(*(x++));}template<typename T,typename...T2> inline void read(T&x,T2&...y){read(x),read(y...);}template<typename T,typename...T2> inline void write(const T x,const T2...y){write(x),putchar(' '),write(y...),sizeof...(y)==1?putchar('\n'):0;}
}using namespace IO;
template<int maxn,int maxm>class LSQXX{
public:int head[maxn],nxt[maxm*2],to[maxm*2],val[maxm*2],cost[maxm*2],cnt=1;void add(int u,int v,int w,int c){nxt[++cnt]=head[u],to[cnt]=v,val[cnt]=w,cost[cnt]=c,head[u]=cnt;}void clear(){cnt=0;memset(head,0,sizeof(head));}
};
const int maxn=810,maxm=15010,inf=1000000000;
int n,m,a[maxn];
class Network_Flow{
private:LSQXX<maxn*2,maxn*4+maxm>e;bool vis[maxn*2],inque[maxn*2];int dis[maxn*2],s,t,ans,cur[maxn*2];queue<int>q;bool spfa(){for(int i=s;i<=t;i++) dis[i]=inf;dis[s]=0;q.push(s);while(!q.empty()){int u=q.front();q.pop();inque[u]=0;for(int i=e.head[u];i;i=e.nxt[i]){int v=e.to[i];if(!e.val[i]) continue;if(dis[v]<=dis[u]+e.cost[i]) continue;dis[v]=dis[u]+e.cost[i];if(!inque[v]) inque[v]=1,q.push(v);}}return dis[t]!=inf;}int dfs(int u,int flow=inf){if(u==t||flow==0) return flow;if(vis[u]) return 0;vis[u]=1;int sum_flow=0;for(int&i=cur[u];i;i=e.nxt[i]){int v=e.to[i];if(dis[v]!=dis[u]+e.cost[i]) continue;int nflow=dfs(v,min(flow,e.val[i]));e.val[i]-=nflow,e.val[i^1]+=nflow;sum_flow+=nflow,flow-=nflow;ans+=nflow*e.cost[i];if(flow==0) break;}vis[u]=0;return sum_flow;}void edge_add(int u,int v,int w,int c){e.add(u,v,w,c),e.add(v,u,0,-c);}int bh(int u,int x){return (u<<1)+x-1;}
public:int work(){while(spfa()){for(int i=s;i<=t;i++) cur[i]=e.head[i];dfs(s);}return ans;}void build(){s=0,t=(n<<1)+3;for(int i=1;i<=n;i++) edge_add(s,bh(i,1),1,a[i]),edge_add(s,bh(i,0),1,0),edge_add(bh(i,1),t,1,0);for(int i=1;i<=m;i++){int u,v,w;read(u,v,w);if(u>v) swap(u,v);edge_add(bh(u,0),bh(v,1),1,w);}}
}wll;
signed main(){read(n,m);for(int i=1;i<=n;i++) read(a[i]);wll.build();write(wll.work());return 0;
}
http://www.jsqmd.com/news/535292/

相关文章:

  • Hi3516CV610搭配PQStream图像采集全流程:Windows与Linux板端详细配置指南
  • 避坑指南:uniapp中使用echarts常见6大报错解决方案(2023最新版)
  • ESP32日志系统深度解析:如何灵活使用esp_log_level_set控制调试输出
  • so-vits-svc终极指南:如何免费实现高质量AI歌声转换
  • 开源工具Rufus实现专业级启动盘制作的完整指南
  • RTX 5090首发评测:Blackwell架构到底强在哪?对比4090实测游戏帧数
  • 2025年优质电梯广告品牌口碑分析,收藏备用,地铁广告/社区门禁广告/电梯广告/公交站台广告/电梯视频广告/社区道闸广告电梯广告公司推荐分析 - 品牌推荐师
  • Pybind11实战:C++与Python互调中的字符串编码避坑指南(附完整代码)
  • Xilinx MicroBlaze软核调试实战指南
  • TDengine IDMP 1-产品简介
  • 学习记录26/3/24
  • # 20252921 2025-2026-2 《网络攻防实践》第1周作业
  • 格式混乱拖慢创作节奏?Trelby开源剧本软件智能排版技术提升47%写作效率
  • 离线AI翻译技术选型:Argos Translate架构解析与实施指南
  • 18-AI论文创作:自动找参考文献并精准标注
  • Spring小知识点
  • 意法半导体:华虹40nm代工生产的STM32 MCU开启交付
  • IPTV抓包工具合集:Wireshark、parse_cap_channels_v2、IPTV全能工具箱
  • Bespoke Curator:解锁多模型AI协作的3大核心优势与实战指南
  • vue甘特图vxe-gantt自定义任务视图单元格的背景颜色
  • 20252916 2025-2026-2 《网络攻防实践》第3周作业
  • HunyuanImage-3.0-Instruct:8步玩转AI创意绘图
  • 树莓派4B实战:用systemd守护你的Python爬虫(附日志配置指南)
  • Visual Studio 2019下载地址
  • 阿里悟空 vs 腾讯龙虾:大厂 AI 自动化对决,普通人该怎么选?
  • VPI联合Matlab相干光通信仿真:发射端I/Q信号生成与VPI接口实战
  • LaTeX多行大括号公式速成指南:5分钟搞定不等式排版(附常见错误排查)
  • SpringBoot+Vue 校园健康驿站管理系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • 一文吃透AI智能体(Agent):从基础到核心,AI Agent大从概念到实战
  • 基于决策树手写数字识别 matlab实现 包含定位、分割(5*5)、二值化、主成分分析法 交叉...