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 ...
随机推荐
- react+redux+webpack+git技术栈
一.git bash here mdkr cnpm init -y ls -a ls -l ls -la隐藏的也可查看 cat package.json 二.npm npm i webpack-dev ...
- RabbitMQ第四篇:Spring集成RabbitMQ
前面几篇讲解了如何使用rabbitMq,这一篇主要讲解spring集成rabbitmq. 首先引入配置文件org.springframework.amqp,如下 <dependency> ...
- 后端Nodejs利用node-xlsx模块读取excel
后端Nodejs(利用node-xlsx模块) /** * Created by zh on 16-9-14. */ var xlsx = require("node-xlsx") ...
- Java面试总结(二)
前几天去了几家公司面试,果然,基本全部倒在二面上,无语啊...不过幸好,到最后拿到了环球易购的offer,打算就这么好好呆着了,学习学习,努力努力,下面讲讲这几天的面试吧. 先是恒大,一个组长面试,答 ...
- 从零部署Spring boot项目到云服务器(正式部署)
上一篇文章总结了在Linux云服务器上部署Spring Boot项目的准备过程,包括环境的安装配置,项目的打包上传等. 链接在这里:http://www.cnblogs.com/Lovebugs/p/ ...
- 连接数据后,当执行查询语句报错:ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询
参考博客:http://blog.csdn.net/lanchengxiaoxiao/article/details/40982771 1.在cmd窗口通过sqlplus连接数据库 C:\Users\ ...
- 248&258--高级软件工程第三次作业
0 小组成员 马帅 / 2017202110248 齐爽爽 / 2017282110258 1 项目 GitHub 地址 GitHub:https://github.com/whumashuai/QT ...
- 网络1712--c语言字符数组作业总结..
---恢复内容开始--- 作业亮点 1.总体情况 1.大部分同学利用了流程图后,对于思路的理解有了提升. 2.很多同学在总结方面写的很不错,能够罗列问题贴出解决问题,我们能够看到你们的进步 2.作业发 ...
- 关于安装wordpress出现500 Internal Server Error的解决方案
安装新版本wordpress出现500 Internal Server Error的问题: 在./wp-includes/class-http.php的268行,改成 $request_order = ...
- 20145237 《Java程序设计》第10周学习总结
20145237 <Java程序设计>第10周学习总结 教材学习内容总结 Java的网络编程 •网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. •java.n ...