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爬取 百度图片Google图片Bing图片
先看看抓取的结果. 8个Java类: Startup.java - main函数 ImageCrawler.java - Crawler基类 BaiduImageCrawler.java - 百度图片 ...
- 自己动手写泛型dao
在经过一系列的问题得到解决之后,泛型dao终于写出来了.泛型dao相比于以前写的dao最大的好处就是,大大提高了代码的复用性,以往我们要对数据库中表中的数据进行操作的时候,每张表都需要写一个dao来操 ...
- 【Windows】定时任务设置
Windows定时任务 linux上面的定时任务已经解除过好多次了.不外乎crontab,at之类的命令,而windows上的定时任务今天才偶尔看到怎么设置.想到以后生活上可能会用到一些这方面的知识就 ...
- 设计模式 --> (7)外观模式
外观模式 外观模式为子系统中的一组接口提供一个一致的界面, 外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 适用性 1.为一个复杂子系统提供一个简单接口. 2.提高子系统的独立性. ...
- diy51单片机最小系统------从零件到51整体测试成功小白篇
前言 因为现在网上资料很多,但是很多博主水平不一样,有很多时候,自己在网上找了很多资料,因为自己智商不够,有时候感觉很多关键性的东西没说清楚,导致解决不了问题.那现在就从一个小白的角度来记录自己做过的 ...
- Android 优化APP 构建速度的17条建议
转载:http://www.jianshu.com/p/a1cc8f2e0877 较长的构建时间将会减缓项目的开发进度,特别是对于大型的项目,app的构建时间长则十几分钟,短则几分钟,长的构建时间已经 ...
- DevOps实践之Jenkins安装部署
Prerequisites Minimum hardware requirements: 256 MB of RAM 1 GB of drive space (although 10 GB is a ...
- C语言第一次博客作业---顺序机构基础练习
一.PTA实验作业 题目1.温度转换 本题要求编写程序,计算华氏温度150°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1.实验代 ...
- 每日冲刺报告-Day4
敏捷冲刺报告--Day4 情况简介 今天完成前端后端任务对接, GUI主体编写 任务进度 赵坤: 完成后端爬虫 李世钰: 前后端对接, GUI编写 黄亦薇:召集小组成员开会,帮助查找资料,寻找BUG ...
- APP的案例分析-美团外卖
大一才开始用软件订外卖了,很方便 ,上手快只要注册个账号登陆即可,支付时自动跳转到其他支付应用.严重的bug也没有,只有之前一段时间通过首单可以刷优惠,之后也修复了. 身边的同学也很多都在用.方便省 ...