博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
题解 P1339 【[USACO09OCT]热浪Heat Wave】
阅读量:7234 次
发布时间:2019-06-29

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

这道题纯属是一个裸的SPFA;

建议先把模板AC之后再做。
只需要做一些手脚,就是在加边的时候加一个双向边就好。
然后再第一次加点的时候
看不懂模板的出门左转度娘。
推荐下面一片讲解:
所以说,直接上代码。

#include
#include
#include
#include
#include
using namespace std;struct data{ int v;int next; int value;}edge[500010];//临界链表存变int cnt;int alist[10010];void add(int u,int v,int value){ edge[++cnt].v=v; edge[cnt].value=value; edge[cnt].next=alist[u]; alist[u]=cnt; return ;}//加边queue
q;bool ins[10010];int d[10010];void spfa(int x)//跑一边SPFA,原理在上面{ d[x]=0; q.push(x); ins[x]=true; while(!q.empty()) { int now=q.front(); q.pop();ins[now]=false; int next=alist[now]; while(next) { int v=edge[next].v; int value=edge[next].value; if(d[v]>d[now]+value) { d[v]=d[now]+value; if(!ins[v]) { q.push(v); ins[v]=true; } } next=edge[next].next; } } return ;}int m,n,s,e;int main(){ scanf("%d%d%d%d",&m,&n,&s,&e);//输入 for(int i=1;i<=n;i++) { int u,v,value; scanf("%d%d%d",&u,&v,&value); add(u,v,value);//加边 add(v,u,value);//反向边 } for(int i=0;i<=m;i++) d[i]=0x3f3f3f3f;//初始化 spfa(s);//跑SPFA printf("%d",d[e]);//输出 return 0;//程序拜拜}

 

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

你可能感兴趣的文章
如何恢复手机误删的文件?
查看>>
P1181 数列分段Section I
查看>>
linux ls命令教程,ls命令怎么用,全部招数都教你
查看>>
java 内部类详解
查看>>
qualcomm batch 烧录脚本
查看>>
C# 添加、修改以及删除Excel迷你图表的方法
查看>>
【spring data jpa】spring data jpa的in查询
查看>>
mysql中计算日期整数差
查看>>
jquery 图片懒加载
查看>>
tcpkill工作原理分析
查看>>
多线程测试
查看>>
简单读!Mybatis源码(一)一条select的一生
查看>>
TX Text Control文字处理教程(5)数据库操作
查看>>
特殊数据类型成员变量的初始化
查看>>
Using the ReportViewer ASP.NET Control in Windows Azure
查看>>
发送短信
查看>>
Django pickling
查看>>
HDOJ---2175 汉诺塔IX[递推]
查看>>
DataGrid中删除分页最后一条记录时PageIndex错误的解决方法
查看>>
用Python获取本机网卡IP数据包
查看>>