博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Uva 10917
阅读量:6068 次
发布时间:2019-06-20

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

题目链接:

题意:一个人要从点1去到点2,中间还有很多点和很多条边。问你如果他每次走的边(a,b)都满足:a点到目标点的最短距离<b点到目标点的最短距离,那么他从点1出发到点2总共有多少条路径。

分析:

从家出发使用dijkstra,题目的条件"存在一条从B出发回家的路径,比所有从A出发的路径都短",实际上就是 d[B] < d[A],这样,就有:一条有向边 A->B,建立新图。从起点出发到终点有多少条路。DAG模型。

 

#include 
using namespace std;const int maxn = 1000+ 10;const int INF = 0x3f3f3f3f;struct Edge{ int from,to,dist;};struct HeapNode{ int d,u; bool operator < (const HeapNode& rhs) const { return d > rhs.d; }};struct Dijkstra{ int n,m; vector
edges; vector
G[maxn]; bool done[maxn]; int d[maxn]; int p[maxn]; void init(int n) { this->n = n; for(int i=0; i
Q; for(int i=0; i
d[u]+e.dist) { d[e.to] = d[u] + e.dist; p[e.to] = G[u][i]; Q.push((HeapNode) { d[e.to],e.to }); } } } }};Dijkstra solve;int d[maxn];int dp(int u){ if(u==1) return 1; int& ans = d[u]; if(ans>=0) return ans; ans = 0; for(int i=0; i

 

转载于:https://www.cnblogs.com/TreeDream/p/6103887.html

你可能感兴趣的文章
未在本地计算机上注册“Microsoft.Ace.OleDb.12.0”提供程序解决办法
查看>>
PHP and java
查看>>
sharepoint 2010 自定义页面布局
查看>>
〖Linux〗Android NDK调用已编译好的C/C++动态连接库(so文件)
查看>>
MD5编码工具类 MD5Code.java
查看>>
VB.NET TextBox 只允许输入1-100之间的整数 简洁篇
查看>>
UNIX网络编程读书笔记:端口号、套接口对和套接口
查看>>
数值积分初步
查看>>
ADS错误the session file 'C:\user\username\default-1-2-0-0.ses' could not be loaded解决办法
查看>>
在MVC应用程序中,怎样删除上传的文件
查看>>
asp.net报错“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”的解决办法...
查看>>
localForage——轻松实现 Web 离线存储
查看>>
SharePoint 中用户控件的开发及应用
查看>>
10分钟学会搭建Android开发环境 Eclipse: The import android.support cannot be resolved
查看>>
yum只下载软件不安装的两种方法
查看>>
silverlinght 项目
查看>>
记录下DynamicXml和HtmlDocument 使用方式
查看>>
[转]linux awk命令详解
查看>>
C#操作IE浏览器
查看>>
搜狗拼音输入法LINUX版安装
查看>>