博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P2865 [USACO06NOV]路障Roadblocks
阅读量:7211 次
发布时间:2019-06-29

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

次短路模板题吧

题意已经非常裸了:求无向图的1到n次短路。

直接套用最短路(dijkstra)的主要框架。但在这个的基础上添加另外一个数组dist2

走到一条边的时候来三个判定:

  1. dist[u] + weight < dist[v]直接可以更新最短路,新的次短路就是曾经的最短路。

  2. dist[u] + weight > dist[v] && dist[u] + weight < dist2[v]不可更新最短路,但可以更新次短路。

  3. dist2[u] + weight < dist2[v]可以更新次短路。

然后就可以差不多写出来了。

话说这道题数据水。

代码:

```cpp

include

include

include

const int maxn = 5005, maxm = 100005;

struct Edges
{
int next, to, weight;
} e[maxm << 1];
int head[maxn], tot;
int dist[maxn], dist2[maxn];

int n, m;

struct Heapnodes
{
int d, u;
bool operator < (const Heapnodes &rhs) const
{
return d > rhs.d;
}
};
void link(int u, int v, int w)
{
e[++tot] = (Edges){head[u], v, w};
head[u] = tot;
}
void dijkstra(int s, int t)
{
memset(dist, 0x3f, sizeof dist);
memset(dist2, 0x3f, sizeof dist2);// 0x7f???
std::priority_queue heap;
dist[s] = 0; heap.push((Heapnodes){dist[s], s});
while(!heap.empty())
{
Heapnodes x = heap.top(); heap.pop();
int d = x.d, u = x.u;
if(d != dist[u]) continue;
for(int i = head[u]; i; i = e[i].next)
{
int v = e[i].to;
if(dist[u] + e[i].weight < dist[v])
{
dist2[v] = dist[v];
dist[v] = dist[u] + e[i].weight;
heap.push((Heapnodes){dist[v], v});
}
if(dist[u] + e[i].weight > dist[v] && dist[u] + e[i].weight < dist2[v])
{
dist2[v] = dist[u] + e[i].weight;
heap.push((Heapnodes){dist[v], v});
}
if(dist2[u] + e[i].weight < dist2[v])
{
dist2[v] = dist2[u] + e[i].weight;
//heap.push((Heapnodes){dist[v], v});
}
}
}
}
int main()
{
scanf("%d%d", &n, &m);
while(m--)
{
int u, v, w; scanf("%d%d%d", &u, &v, &w);
link(u, v, w); link(v, u, w);
}
dijkstra(1, n);
printf("%d\n", dist2[n]);
return 0;
}
``

转载于:https://www.cnblogs.com/Garen-Wang/p/9905766.html

你可能感兴趣的文章
下载输入python之小说下载器version2.0
查看>>
解决hibernate双向关系造成的一方重复执行SQl,或者死循环的问题
查看>>
用js如何获取file是否存在
查看>>
Extjs DateField onchange
查看>>
KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结
查看>>
Mysql 常用命令
查看>>
linux “命令行自动补全”功能用命令
查看>>
《JAVA与模式》之装修者模式
查看>>
关于JFace中的向导式对话框(WizardDialog类)
查看>>
Oracle数据库order by排序查询分页比不分页还慢问题解决办法
查看>>
学习NGUI前的准备NGUI的相关信息
查看>>
自制时间比对函数处理 比对过去时间与当前时间相差多少年多少月多少周多少分 多少秒...
查看>>
box2dweb 学习笔记--sample讲解
查看>>
C++ 将数据转为字符串的几种方法
查看>>
eclipse 左边目录结构下五referenced library解决办法
查看>>
计算机面试书籍与求职网站推荐
查看>>
TextView跑马灯效果
查看>>
LeetCode 58 Spiral Matrix II
查看>>
iTunes 安装ipa文件到iPhone上
查看>>
PLSQL:[1]plsql中文乱码,显示问号
查看>>