P3003 [USACO10DEC]苹果交货Apple Delivery

这题没什么可说的,跑两遍单源最短路就好了

$Spfa$过不了,要使用堆优化的$dijkstra$

细节:1.必须使用优先队列+堆

2.更新方式跟$Spfa$有所不同

#include<bits/stdc++.h>

using namespace std;

void in(int &x){
register char c=getchar();x=;int f=;
while(!isdigit(c)){if(c=='-') f=-;c=getchar();}
while(isdigit(c)){x=x*+c-'';c=getchar();}
x*=f;
} int c,p,p_b,pa_1,pa_2,head[],vis[],d[],tot,ans;
struct node{
int to,dis,pre;
}e[];
void add(int u,int v,int w){
e[++tot].to=v;e[tot].pre=head[u];head[u]=tot;e[tot].dis=w;
}
struct npde{
int to,dis;
bool operator < (const npde &x) const{
return dis>x.dis;
}
};
priority_queue<npde>Q;
void spfa(int s){
while(!Q.empty()) Q.pop();
memset(vis,,sizeof(vis));memset(d,0x7f,sizeof(d));
d[s]=;Q.push((npde){s,});
while(!Q.empty()){
int u=Q.top().to;Q.pop();
if(vis[u]) continue;
vis[u]=;
for(int i=head[u],v;v=e[i].to,i;i=e[i].pre){
if(d[v]>d[u]+e[i].dis){
d[v]=d[u]+e[i].dis;
Q.push((npde){v,d[v]});
}
}
}
}
int main()
{
in(c),in(p),in(p_b),in(pa_1),in(pa_2);
for(int i=;i<=c;i++){
int u,v,w;
in(u),in(v),in(w);
add(u,v,w);add(v,u,w);
}spfa(p_b);
if(d[pa_1]<d[pa_2])ans+=d[pa_1],spfa(pa_1),ans+=d[pa_2];
else ans+=d[pa_2],spfa(pa_2),ans+=d[pa_1];
printf("%d\n",ans);
return ;
}

最新文章

  1. mvc中Url.RouteUrl或者Html.RouteLink实现灵活超链接,使href的值随路由名称或配置的改变而改变[bubuko.com]
  2. 继续送假期干货——响应式图片工具smartImg
  3. Web Performance Test : IP切换/IP欺骗
  4. 洛谷P1174 打砖块
  5. XSS的DOS攻击之 server limit dos
  6. js:数据结构笔记13--检索算法
  7. 实践Oracle与DB2区别及问题解决
  8. GetWindowThreadProcessId用法(转)
  9. bzoj 2002 [Hnoi2010]Bounce 弹飞绵羊(LCT)
  10. 【Matlab】随机游走产生图像效果
  11. Supervisord管理
  12. urlrewrite 匹配规则之优先选择
  13. xBIM 插入复制功能
  14. 图片压缩上传Thumbnailator 插件
  15. 如何删除github上的某个文件夹
  16. 使用iscroll,无法正常滑动的原因
  17. pascal中的xor,shr,shl,Int(),ArcTan(),copy,delete,pos和leftstr,RightStr等详解
  18. Git-git push -u为何第二次不用指定-u?
  19. Vagrant测试
  20. Python网络爬虫-requests模块(II)

热门文章

  1. HTTP要点概述:十一,HTTP状态码
  2. Bootstrap Dropdown 源码分析
  3. XMU 1125 越野车大赛 【三分】
  4. HDU5768Lucky7
  5. TI BLE:SCAN
  6. 33. Extjs中的tree节点的操作
  7. html5 画图板
  8. PCB 圆形板切边算法 实现
  9. win10家庭版添加本地账户方法
  10. 一个完整的mybatis项目,包含增删改查