博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
loj 1379(最短路变形)
阅读量:7072 次
发布时间:2019-06-28

本文共 1312 字,大约阅读时间需要 4 分钟。

题目链接:

思路:题目的意思是求S->T的所有路径中花费总和小于给定的P值的所经过的路径上的最大权值。我们可以从起点做一次SPFA,然后求出起点到所有点的最短路径,然后以终点为起点,将边反向,求终点到起点的最短路,然后枚举每一条边即可,求最大值。

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 #define MAXN 22222 8 #define MAXM 222222 9 #define inf 1<<3010 #define FILL(a,b) memset(a,b,sizeof(a))11 12 template
inline T Get_Min(const T &a,const T &b){ return a
inline T Get_Max(const T &a,const T &b){ return a>b?a:b; }14 struct Edge{15 int v,w,next;16 }edge1[MAXM],edge2[MAXM];17 18 int n,m,st,ed,p,NE1,NE2;19 int head1[MAXN],head2[MAXN];20 21 void Insert1(int u,int v,int w)22 {23 edge1[NE1].v=v;24 edge1[NE1].w=w;25 edge1[NE1].next=head1[u];26 head1[u]=NE1++;27 }28 29 void Insert2(int u,int v,int w)30 {31 edge2[NE2].v=v;32 edge2[NE2].w=w;33 edge2[NE2].next=head2[u];34 head2[u]=NE2++;35 }36 37 int dist[2][MAXN];38 bool mark[MAXN];39 void spfa(int st,int ed,Edge *edge,int *dist,int *head)40 {41 FILL(mark,false);42 fill(dist,dist+n+2,inf);43 queue
que;44 que.push(st);45 dist[st]=0;46 while(!que.empty()){47 int u=que.front();48 que.pop();49 mark[u]=false;50 for(int i=head[u];i!=-1;i=edge[i].next){51 int v=edge[i].v,w=edge[i].w;52 if(dist[u]+w
View Code

 

转载地址:http://kozml.baihongyu.com/

你可能感兴趣的文章
感动....
查看>>
java 错误 classes路径配置错误
查看>>
shell启动执行cypher语句
查看>>
主题提取_自己的代码
查看>>
遗传算法
查看>>
VA操作设置快捷键生成注释头
查看>>
如何将String转换为int
查看>>
VC++修改电脑系统时间
查看>>
test
查看>>
4层板(AD)转
查看>>
网络是怎样连接的 读书笔记
查看>>
把大象放进冰箱需要几步?
查看>>
【转】关于apt源配置的问题
查看>>
CCF NOI1064 计算斐波那契第n项
查看>>
64 位 win7 使用PLSQL Developer
查看>>
HDU1087:Super Jumping! Jumping! Jumping!(普通上升子序列 + dp)
查看>>
HTML 5 全局 contenteditable 属性
查看>>
安卓开发学习笔记—————《Anroid编程权威指南》第四章 Android应用的调式...
查看>>
通过git上传本地代码到github仓库
查看>>
简单的读取文件和写入文件
查看>>