Uva10917 Walk Through the Forest
题目链接: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的更多相关文章
- UVA-10917 Walk Through the Forest (dijkstra+DP)
题目大意:n个点,m条边的无向图.一个人从起点到终点按照下面的走法:从A走向B当A到终点的最小距离比B到终点的最小距离大时.问从起点到终点有多少路径方案. 题目分析:先用dijkstra预处理出终点到 ...
- 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 ...
- UVa 10917 A Walk Through the Forest
A Walk Through the Forest Time Limit:1000MS Memory Limit:65536K Total Submit:48 Accepted:15 Descrip ...
- hdu_A Walk Through the Forest ——迪杰特斯拉+dfs
A Walk Through the Forest Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/ ...
- 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 ...
- A Walk Through the Forest
A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
随机推荐
- 【Java面试题】14 super.getClass()方法调用
下面程序的输出结果是多少? import java.util.Date; public class Test extends Date{ public static void main(String[ ...
- 在hadoop集群添加了slave节点的方法
分为以下几个步骤: 1 ,修改master和slave 的参数,和配置时相同,只是修改和节点数相关,如slaves(我的只改了slaves), 将任意一个该好的文件发送到新增加的机器(或者虚拟机) ...
- Windows下配置Apache+PHP跑Wordpress拾遗
首先,我很少这么做,因为一旦有跑WAMP的需求,我就直接下一个wamp的安装包就可以了,市面上数不胜数,我一直用的是EasyPHP,不是说它有多好,而是很多年前第一次用后没什么问题,就一直用下来了.这 ...
- oracle 触发器 pragma autonomous_transaction
from:http://blog.csdn.net/ruru7989/article/details/30712987一般情况下在触发器中是不能使用DDL语句的,使用自治事务可以实现 可以在触发器中加 ...
- day01<计算机基础知识&Java语言基础>
计算机基础知识(计算机概述) 计算机基础知识(软件开发和计算机语言概述) 计算机基础知识(人机交互) 计算机基础知识(键盘功能键和快捷键) 计算机基础知识(如何打开DOS控制台) 计算机基础知识(常见 ...
- ios iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)
iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) 转自容芳志大神的博客:http://www.cnblogs.com/stoic/archive/2013/02/27/2940 ...
- python2.0_day18_django_form
Django formDjango admin 为什么要讲form,Django里的form能做什么. 前面day16节 简单学习了Django admin,我们知道当我们的models在admin. ...
- YARN 中的应用程序提交
YARN 中的应用程序提交 本节讨论在应用程序提交到 YARN 集群时,ResourceManager.ApplicationMaster.NodeManagers 和容器如何相互交互.下图显示了一个 ...
- Redhat系列使用ISO或者光盘制作yum本地安装源
适用系统:redhat系列 示例系统:CentOS 6x86_64 环境:虚拟机 有时候做实验又不能联网的情况下想装一款软件时,经常会搞的头大:难道要去系统镜像中一个个拷出来再用rpm安装?各种依 ...
- 元素设置disabled属性后便无法向后台传值
元素设置disabled属性后便无法向后台传值