uva 10917 Walk Through The Forest
题意:
一个人从公司回家,他可以从A走到B如果从存在从B出发到家的一条路径的长度小于任何一条从A出发到家的路径的长度。
问这样的路径有多少条。
思路:
题意并不好理解,存在从B出发到家的一条路径的长度小于任何一条从A出发到家的路径的长度,从这个条件可以推出只要满足B到家的最短路小于从A到家的最短路,那么就是满足条件的。
所以从家开始求到各个点的最短路,然后从公司开始进行记忆化搜索求出路径的总条数。
如果两个点A和B满足d[A] > d[B],那么A到家的路径条数一定包括B到家的路径条数,临界条件就是到家了,那么只有一条路可以走。
复杂度O(nlog(n));
代码:
#include <stdio.h>
#include <vector>
#include <queue>
#include <string.h>
using namespace std; struct edge
{
int to;
long long cost; edge(int uu,long long vv)
{
to = uu;
cost = vv;
}
}; const int maxn = ; vector<edge> g[maxn];
long long d[maxn];
bool vis[maxn];
long long dp[maxn]; void adde(int st,int to,int cost)
{
g[st].push_back(edge(to,cost));
} void dij(int s,int n)
{
for (int i = ;i <= n;i++) d[i] = ;
memset(vis,,sizeof(vis)); d[s] = ; for (int i = ;i < n - ;i++)
{
long long dis = ;
int x; for (int j = ;j <= n;j++)
{
if (d[j] <= dis && !vis[j])
{
dis = d[j];
x = j;
}
} vis[x] = ; for (int j = ;j < g[x].size();j++)
{
edge e = g[x][j]; if (d[e.to] > d[x] + e.cost)
{
//ways[e.to] = ways[x];
d[e.to] = d[x] + e.cost;
}
}
}
} int dfs(int u,int fa)
{
if (dp[u] != -) return dp[u]; dp[u] = ; for (int i = ;i < g[u].size();i++)
{
int v = g[u][i].to; if (v == fa) continue; if (d[u] > d[v])
{
if (dp[v] != -) dp[u] += dp[v];
else dp[u] += dfs(v,u);
}
} return dp[u];
} int main()
{
int n,m; while (scanf("%d",&n) != EOF)
{
if (n == ) break; scanf("%d",&m); for (int i = ;i <= n;i++) g[i].clear();
memset(dp,-,sizeof(dp)); //memset(ways,0,sizeof(ways)); for (int i = ;i < m;i++)
{
int x,y,z; scanf("%d%d%d",&x,&y,&z); adde(x,y,z);
adde(y,x,z);
} dij(,n); //memset(vis,0,sizeof(vis)); dp[] = ; dfs(,-); printf("%lld\n",dp[]);
} return ;
}
uva 10917 Walk Through The Forest的更多相关文章
- UVA - 10917 - Walk Through the Forest(最短路+记忆化搜索)
Problem UVA - 10917 - Walk Through the Forest Time Limit: 3000 mSec Problem Description Jimmy exp ...
- UVA 10917 Walk Through the Forest SPFA
uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem= ...
- UVA 10917 Walk Through the Forest(dijkstra+DAG上的dp)
用新模板阿姨了一天,换成原来的一遍就ac了= = 题意很重要..最关键的一句话是说:若走A->B这条边,必然是d[B]<d[A],d[]数组保存的是各点到终点的最短路. 所以先做dij,由 ...
- UVa 10917 A Walk Through the Forest
A Walk Through the Forest Time Limit:1000MS Memory Limit:65536K Total Submit:48 Accepted:15 Descrip ...
- 训练指南 UVA - 10917(最短路Dijkstra + 基础DP)
layout: post title: 训练指南 UVA - 10917(最短路Dijkstra + 基础DP) author: "luowentaoaa" catalog: tr ...
- A Walk Through the Forest[HDU1142]
A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- hduoj----1142A Walk Through the Forest(记忆化搜索+最短路)
A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- HDU 1142 A Walk Through the Forest (记忆化搜索 最短路)
A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- HDU 1142 A Walk Through the Forest (求最短路条数)
A Walk Through the Forest 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1142 Description Jimmy exp ...
随机推荐
- Java后台模拟发送http的get和post请求,并测试
个人学习使用:谨慎参考 1 Client类 import com.thoughtworks.gauge.Step; import com.thoughtworks.gauge.Table; impor ...
- laravel-Policy步骤
用户授权Policy 定义策略类 php artisan make:policy <name> 定义方法 注册策略类和模型关联 app > Providers > AuthSe ...
- 【Python】 Web开发框架的基本概念与开发的准备工作
Web框架基本概念 现在再来写这篇文章显然有些马后炮的意思.不过正是因为已经学习了Flask框架, 并且未来计划学习更加体系化的Django框架,在学习过程中碰到的很多术语等等,非常有必要通过这样一篇 ...
- 【CSS】 CSS 定位
css 定位和浮动 *******本章大量内容copy自w3school********* 定位对于html界面还是很重要的,因为定位会直接影响到用户的视图.对于css而言,定位也比较灵活. 浮动是一 ...
- ping通但打不开网页
ping通但打不开网页 网页出现: The proxy server is refusing connections Firefox is configured to use a proxy serv ...
- 关于Mysql DATE_FORMAT() 日期格式
定义和用法 DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据. 语法 DATE_FORMAT(date,format) date 参数是合法的日期.format 规定日期/时间的输出 ...
- java数组排序,并将数组内的数据求和
java数据编列并求和,江湖我狼哥,人狠话不多,直接上代码! import java.util.Arrays; public class Intarry { public static void ma ...
- Python+reuqests自动化接口测试
1.最近自己在摸索Python+reuqests自动化接口测试,要实现某个功能,首先自己得有清晰的逻辑思路!这样效率才会很快! 思路--1.通过python读取Excel中的接口用例,2.通过pyth ...
- eoLinker API-Shop 抓住区块链机遇,从这些API开始
区块链是分布式存储.点对点传输.共识机制.加密算法等计算机技术的新型应用模式.所谓共识机制是区块链系统中实现不同节点之间建立信任.获取权益的数学算法. 区块链目前分为三类: 公有区块链(PublicB ...
- JavaScript(第七天)【对象和数组】
什么是对象,其实就是一种类型,即引用类型.而对象的值就是引用类型的实例.在ECMAScript中引用类型是一种数据结构,用于将数据和功能组织在一起.它也常被称做为类,但ECMAScript中却没有这种 ...