尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
P2483 【模板】k 短路 / [SDOI2010] 魔法猪学院
题意给出一张nnn个点mmm条边的有向带权图求出最大的kkk满足前kkk短路径加长度起来大于EEE。n≤5010n\le5010n≤5010m≤2×105m\le2\times10^5m≤2×105E≤107E\le10^7E≤107边权w≤Ew\le Ew≤E。思路先用dijdijdij在反图上跑建一个以nnn为根的最短路树对于一个点uuu定义d(u)d(u)d(u)为uuu到nnn的最短路长度。对于一条边(u,v,w)(u,v,w)(u,v,w)定义祂的新权值w′wd(v)−d(u)wwd(v)-d(u)w′wd(v)−d(u)。对于一条路径把路径上的非最短路树边按照顺序领出来设为(u1,v1),(u2,v2),…(u_1,v_1),(u_2,v_2),\dots(u1​,v1​),(u2​,v2​),…那么对于每个iii有ui1u_{i1}ui1​是viv_ivi​在最短路树上的祖先而这条路径的边权和为d(s)d(s)d(s)加所有非最短路树边的新权值和。现在来考虑一个暴力在每个点uuu上存所有以uuu的某个祖先为起点的非最短路树边用一个优先队列存现在有哪些路经每次选最短的取出来并把祂能到直接达的所有点放进优先队列。显然这样是过不了的但是可以用可持久化可并堆优化。具体的每个点开可并小根堆存以这个点祖先为起点的所有非最短路树边。显然同一个堆中只有堆顶需要放进优先队列。在把一个路径取出来时只需要把祂在堆上的左右儿子和祂存的边能到达的点加入优先队列。代码// Problem: P2483 【模板】k 短路 / [SDOI2010] 魔法猪学院// Contest: Luogu// URL: https://www.luogu.com.cn/problem/P2483// Memory Limit: 128 MB// Time Limit: 1000 ms//// Powered by CP Editor (https://cpeditor.org)#includebits/stdc.husingnamespacestd;namespaceIO{templatetypenameTinlinevoidread(Tx){x0;charcgetchar();boolf0;while(!isdigit(c))c-?f1:0,cgetchar();while(isdigit(c))xx*10c-0,cgetchar();f?x-x:0;}templatetypenameTinlinevoidwrite(T x){if(x0){putchar(0);return;}x0?x-x,putchar(-):0;shortst[50],top0;while(x)st[top]x%10,x/10;while(top)putchar(st[top--]0);}inlinevoidread(charc){cgetchar();while(isspace(c))cgetchar();}inlinevoidwrite(charc){putchar(c);}inlinevoidread(doublex){scanf(%lf,x);}inlinevoidwrite(doublex){printf(%lf,x);}inlinevoidread(strings){s.clear();charc;read(c);while(!isspace(c)~c)sc,cgetchar();}inlinevoidwrite(string s){for(inti0,lens.size();ilen;i)putchar(s[i]);}templatetypenameTinlinevoidwrite(T*x){while(*x)putchar(*(x));}templatetypenameT,typename...T2inlinevoidread(Tx,T2...y){read(x),read(y...);}templatetypenameT,typename...T2inlinevoidwrite(constT x,constT2...y){write(x),putchar( ),write(y...),sizeof...(y)1?putchar(\n):0;}}usingnamespaceIO;constintmaxn5010,maxm200010;constdoubleeps1e-8;intn,m,fa[maxn],rt[maxn];doubleE,dis[maxn];structEDGE{intu,v;doublew;}b[maxm];vectorpairint,doublee[maxn],ef[maxn];vectorinttr[maxn];boolflag[maxn],in[maxn];namespaceLeftist_Tree{structnode{intch[2],dist,to;doubleval;}t[maxm*20];intcnt;intmerge(intu,intv){if(!u||!v)returnuv;if(t[u].valt[v].val)swap(u,v);intclonecnt;t[clone]t[u];t[clone].ch[1]merge(t[u].ch[1],v);if(t[t[clone].ch[0]].distt[t[clone].ch[1]].dist)swap(t[clone].ch[0],t[clone].ch[1]);t[clone].distt[t[clone].ch[1]].dist1;returnclone;}};voiddij(ints){priority_queuepairdouble,intq;for(inti1;in;i)dis[i]1e15;dis[s]0;q.push({0,s});while(!q.empty()){auto[l,u]q.top();q.pop();if(flag[u])continue;flag[u]1;for(auto[v,w]:ef[u])if(dis[v]dis[u]w)dis[v]dis[u]w,q.push({-dis[v],v});}}voiddfs(intu){for(intv:tr[u]){rt[v]Leftist_Tree::merge(rt[u],rt[v]);dfs(v);}}priority_queuepairdouble,int,vectorpairdouble,int,greaterpairdouble,intqu;signedmain(){read(n,m,E);for(inti1;im;i){intu,v;doublew;read(u,v,w);if(un)w1e15;e[u].push_back({v,w}),ef[v].push_back({u,w});b[i]{u,v,w};}dij(n);for(inti1;in;i)for(auto[v,w]:ef[i])if(abs(dis[v]-dis[i]-w)eps)fa[v]i;for(inti1;in;i)if(dis[i]1e14)in[i]1;for(inti1;im;i){auto[u,v,w]b[i];if((fa[u]vabs(dis[u]-(dis[v]w))eps))continue;wwdis[v]-dis[u];if(in[u]in[v]){intd;Leftist_Tree::t[dLeftist_Tree::cnt]{{0,0},0,v,w};if(rt[u]0)rt[u]d;elsert[u]Leftist_Tree::merge(rt[u],d);}}for(inti1;in;i)if(in[i]fa[i])tr[fa[i]].push_back(i);dfs(n);intans1;E-dis[1];qu.push({dis[1]Leftist_Tree::t[rt[1]].val,rt[1]});while(!qu.empty()){auto[l,u]qu.top();qu.pop();E-l;if(E0)break;ans;if(Leftist_Tree::t[u].ch[0])qu.push({l-Leftist_Tree::t[u].valLeftist_Tree::t[Leftist_Tree::t[u].ch[0]].val,Leftist_Tree::t[u].ch[0]});if(Leftist_Tree::t[u].ch[1])qu.push({l-Leftist_Tree::t[u].valLeftist_Tree::t[Leftist_Tree::t[u].ch[1]].val,Leftist_Tree::t[u].ch[1]});intdrt[Leftist_Tree::t[u].to];if(d)qu.push({lLeftist_Tree::t[d].val,d});}write(ans);return0;}
RELATED

相关推荐

深入解析AMD Ryzen SMU调试工具:从硬件底层到性能优化的完整指南

深入解析AMD Ryzen SMU调试工具:从硬件底层到性能优化的完整指南

深入解析AMD Ryzen SMU调试工具:从硬件底层到性能优化的完整指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: …

📅 2026/11/8 23:10:02
4.19华为OD机试真题 新系统 - 分辨率排序  (JavaPyCC++JsGo)

4.19华为OD机试真题 新系统 - 分辨率排序 (JavaPyCC++JsGo)

分辨率排序 2026 华为OD机试真题 4月19日华为OD上机新系统考试真题 100 分题型 点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 双机位C卷 真题题库目录|全覆盖题库 逐点算法考点详解 题目描述 4K、2K、1080P、720P清晰度定义(清晰度…

📅 2026/10/8 3:53:16
2026会计岗位职场能力培训课程

2026会计岗位职场能力培训课程

会计工作常被视为企业经营的“语言”,负责将纷繁复杂的业务活动转化为标准化的财务信息。然而,随着企业数字化转型的深入,会计职能正经历从“事后记录”向“事前预测、事中控制”的范式转移。对于初入行的会计人员而言,理解这一趋…

📅 2026/10/28 18:15:00
MORE NEWS

更多资讯

📰

沙湾高压电工证怎么报名?工地太忙根本没时间复习考试

沙湾高压电工证怎么报名?工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这是很多电工朋友的共同烦恼。尤其是那些已经在一线工作多年、经验丰富的高压电工,面对考试复习常常感到无从下手。其实, 沙湾高压电工证…

📰

电工证挂靠社保多少钱?别再被中介坑了,这才是正规报考攻略

电工证挂靠社保多少钱?别再被中介坑了,这才是正规报考攻略 不知道去哪报名怕被中介坑,特别是电工证挂靠社保这种事,很多电工朋友一上来就被各种高价培训班、挂靠公司忽悠得晕头转向,甚至花了冤枉钱还拿不到证。现在咱们直接说重点,电工证挂靠社保多少钱…

📰

曲靖电工证考试费用及官方报名入口全解析:别让培训费打水漂

曲靖电工证考试费用及官方报名入口全解析:别让培训费打水漂 怕考不过白交培训费?现在报名电工证考试,很多人最怕的就是花了钱、花了时间,结果还是没通过。尤其是曲靖地区的电工学员,考试费用、考试内容、通过率都是绕不开的问题。如果你还在为【曲靖电工…

📰

特种工29年工龄在电子证书复审流程与实操建议

特种工29年工龄在电子证书复审流程与实操建议 证书过期了不知道怎么复审延期,你是不是也遇到过这种事?特种工29年工龄在,很多人以为工龄长就等于经验足、证书稳当,但现实是,特种作业操作证不是终身有效的, 电子证书…

📰

新野县电工证办理怎么报名 外省证能转吗

新野县电工证办理怎么报名 外省证能转吗 之前考的证在外省能不能转过来?这个问得好,很多在新野县的朋友都是拿着外地证过来咨询的。其实这个事儿,关键看你有没有“全国统一”这个关键词。 特种作业操作证…

📰

之前考的证在外省能不能转过来 电工证现在能不能考多少钱全解析

之前考的证在外省能不能转过来 电工证现在能不能考多少钱全解析 之前考的证在外省能不能转过来?很多老电工都有这样的疑问,特别是像你这样在濮阳做中小施工企业的负责人,经常需要跨省施工,证书的有效性成了刚需。现在很多人在问“ 电工证现在能不能考…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬