题目链接:https://vjudge.net/problem/UVA-10917

题目意思:Jimmy下班回家要闯过一下森林,劳累一天后在森林中散步是非常惬意的事,所以他打算每天沿着一条不同的路径回家,欣赏不同的风景,但他也不太想太晚回家,因此他不打算走回头路。换句话来说,他只会沿着如下条件的道路(A,B)走:存在一条从B出发回家的路径,比所有从A出发回家的路径都要短。我们的任务是要找出一共有有多少条不同的回家路径,家的编号是2,公司的编号是1。

题目思路:最短路+dp,我们现在考虑如何dp,由于从B回家的路比所有从A回家的路都短,所以如果从2出发跑一遍最短路,如果我们重新建一个图了话,如果原图中存在边,且dist[A]>dist[B]的两个AB之间需要建一条边。现在我们dp,考虑子结构,从x点回家的所有路径是多少?应该是点x的边集中所有dist[y]>dist[x]的点y,回家路径的和。也就说当这些y的回家路径确定了以后x回家的路径的数量才确定。所以我们实际上是跑以2为起点的最短路,以2为起点开始的dfs。直接看代码吧!

代码:

 //Author: xiaowuga
#include <bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define MAX INT_MAX
#define mem(s,ch) memset(s,ch,sizeof(s))
const long long N=;
const long long mod=1e9+;
typedef long long LL;
typedef int II;
typedef unsigned long long ull;
#define nc cout<<"nc"<<endl
#define sp " "
II n,m;
vector<pair<II,II> >G[N];
II d[N];
II path[N],done[N];
void Dijkstra(II s,II t){
II vis[N];
mem(d,inf);mem(vis,);
d[s]=;
priority_queue<pair<II,II> >Q;
Q.push(make_pair(-d[s],s));//由于优先队列默认是大顶堆,我们直接放入一个负数就可以了。
while(!Q.empty()){
II now=Q.top().second;
Q.pop();
if(vis[now]) continue;
vis[now]=;
for(II i=;i<G[now].size();i++){
II v=G[now][i].first,w=G[now][i].second;
if(d[v]>d[now]+w){
d[v]=d[now]+w;
Q.push(make_pair(-d[v],v));
}
}
}
}
II dfs(II u){
if(path[u]!=-) return path[u];
path[u]=;
for(II i=;i<G[u].size();i++){
II v=G[u][i].first;
if(d[u]<d[v]){
path[u]+=dfs(v);
}
}
return path[u];
}
int main() {
ios::sync_with_stdio(false);cin.tie();
while(cin>>n&&n){
cin>>m;
for(II i=;i<=n;i++) G[i].clear();
for(II i=;i<m;i++){
II a,b,d;
cin>>a>>b>>d;
G[a].push_back(make_pair(b,d));
G[b].push_back(make_pair(a,d));
}
Dijkstra(,);
//for(II i=1;i<=n;i++) cout<<d[i]<<' '; cout<<endl;
mem(path,-);path[]=;
II ans=dfs();
cout<<ans<<endl;
}
return ;
}

Uva10917 Walk Through the Forest的更多相关文章

  1. UVA-10917 Walk Through the Forest (dijkstra+DP)

    题目大意:n个点,m条边的无向图.一个人从起点到终点按照下面的走法:从A走向B当A到终点的最小距离比B到终点的最小距离大时.问从起点到终点有多少路径方案. 题目分析:先用dijkstra预处理出终点到 ...

  2. A Walk Through the Forest[HDU1142]

    A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  3. hduoj----1142A Walk Through the Forest(记忆化搜索+最短路)

    A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  4. 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 ...

  5. HDU 1142 A Walk Through the Forest (求最短路条数)

    A Walk Through the Forest 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1142 Description Jimmy exp ...

  6. UVa 10917 A Walk Through the Forest

    A Walk Through the Forest Time Limit:1000MS  Memory Limit:65536K Total Submit:48 Accepted:15 Descrip ...

  7. hdu_A Walk Through the Forest ——迪杰特斯拉+dfs

    A Walk Through the Forest Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/ ...

  8. HDU1142 A Walk Through the Forest(最短路+DAG)

    A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...

  9. A Walk Through the Forest

    A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...

随机推荐

  1. motion的移植和使用

    说明: motion主页:http://www.lavrsen.dk/foswiki/bin/view/Motion motion下载地址:http://sourceforge.net/project ...

  2. Perl Spreadsheet::WriteExcel 模块自动生成excel 文件

    Spreadsheet::WriteExcel 是一个跨平台的生成excel文件的模块, 可以方便的设置单元格内容, 样式, sheet 的名称: 但是默认情况下中文会乱码, 需要用Encode模块进 ...

  3. jQuery中 wrap() wrapAll() 与 wrapInner()的差异

    wrap() 方法把每个被选元素放置在指定的 HTML 内容或元素中.jQuery 文档操作 - wrapAll() 方法 wrapAll() 在指定的 HTML 内容或元素中放置所有被选的元素.jQ ...

  4. Hbase1.1.0.1配置集群

    参考链接 http://wuyudong.com/archives/119?utm_source=tuicool 参考链接 http://www.cnblogs.com/archimedes/p/45 ...

  5. SharePoint 2013 一次性上传文件大小限制

    默认是250MB,最大一次上传文件不超过2G The defaut size is 250MB and maximun upload size is 2047MB. It's can't greate ...

  6. Unity3D协程

    协程介绍 Unity的协程系统是基于C#的一个简单而强大的接口 ,IEnumerator,它允许你为自己的集合类型编写枚举器.这一点你不必关注太多,我们直接进入一个简单的例子来看看协程到底能干什么.首 ...

  7. 安装并配置ROS环境1

    ros学习之路(原创博文,转载请标明出处-周学伟http://www.cnblogs.com/zxouxuewei/) 一.ros核心教程    1.安装并配置ROS环境: 注意: 学习这节课之前请按 ...

  8. 配置Java的jdk环境变量

    1.classpath E:\Java\jdk1..0_20\jre\lib\rt.jar;.;E:\Tomcat\lib; 2.JAVA_HOME E:\Java\jdk1..0_20; 3.Pat ...

  9. Swift - UITableView的用法

    因为倾向于纯代码编码,所以不太喜欢可视化编程,不过也略有研究,所以项目里面的所有界面效果,全部都是纯代码编写! 终于到了重中之重的tableview的学习了,自我学习ios编程以来,工作中用得最多的就 ...

  10. Winform的学习

    昨天由于一些原因没有上课啦,虽然也看啦一些东西,但是感觉太少也就没有来啦,嘿嘿,今天认真地了解啦winform,学习了一些控件的使用,但是感觉好多属性知道怎么用的,却还是记得不太清楚,感觉看到啦知道, ...