Uva 10917
题目链接:http://vjudge.net/contest/143062#problem/A
题意:一个人要从点1去到点2,中间还有很多点和很多条边。问你如果他每次走的边(a,b)都满足:a点到目标点的最短距离<b点到目标点的最短距离,那么他从点1出发到点2总共有多少条路径。
分析:
从家出发使用dijkstra,题目的条件"存在一条从B出发回家的路径,比所有从A出发的路径都短",实际上就是 d[B] < d[A],这样,就有:一条有向边 A->B,建立新图。从起点出发到终点有多少条路。DAG模型。
#include <bits/stdc++.h>
using namespace std; const int maxn = + ;
const int INF = 0x3f3f3f3f; struct Edge
{
int from,to,dist;
}; struct HeapNode
{
int d,u;
bool operator < (const HeapNode& rhs) const
{
return d > rhs.d;
}
}; struct Dijkstra
{
int n,m;
vector<Edge> edges;
vector<int> G[maxn];
bool done[maxn];
int d[maxn];
int p[maxn]; void init(int n)
{
this->n = n;
for(int i=; i<n; i++)
G[i].clear();
edges.clear();
} void AddEdge(int from,int to,int dist)
{
edges.push_back((Edge)
{
from,to,dist
});
m = edges.size();
G[from].push_back(m-);
} void dijkstra(int s)
{
priority_queue<HeapNode> Q;
for(int i=; i<n; i++)
d[i] = INF;
d[s] = ;
memset(done,,sizeof(done));
Q.push((HeapNode)
{
,s
});
while(!Q.empty())
{
HeapNode x = Q.top();
Q.pop();
int u = x.u;
if(done[u]) continue;
for(int i=; i<G[u].size(); i++)
{
Edge& e = edges[G[u][i]];
if(d[e.to]>d[u]+e.dist)
{
d[e.to] = d[u] + e.dist;
p[e.to] = G[u][i];
Q.push((HeapNode)
{
d[e.to],e.to
});
}
}
}
}
}; Dijkstra solve;
int d[maxn]; int dp(int u)
{
if(u==) return ;
int& ans = d[u];
if(ans>=) return ans;
ans = ;
for(int i=; i<solve.G[u].size(); i++)
{
int v = solve.edges[solve.G[u][i]].to;
if(solve.d[v]<solve.d[u]) ans +=dp(v);
}
return ans;
} int main()
{ int n,m;
while(scanf("%d",&n),n)
{
scanf("%d",&m);
solve.init(n);
for(int i=; i<m; i++)
{
int u,v,d;
scanf("%d%d%d",&u,&v,&d);
u--;
v--;
solve.AddEdge(u,v,d);
solve.AddEdge(v,u,d);
} solve.dijkstra();
memset(d,-,sizeof(d));
printf("%d\n",dp());
} return ;
}
Uva 10917的更多相关文章
- UVA - 10917 - Walk Through the Forest(最短路+记忆化搜索)
Problem UVA - 10917 - Walk Through the Forest Time Limit: 3000 mSec Problem Description Jimmy exp ...
- 训练指南 UVA - 10917(最短路Dijkstra + 基础DP)
layout: post title: 训练指南 UVA - 10917(最短路Dijkstra + 基础DP) author: "luowentaoaa" catalog: tr ...
- UVA 10917 Walk Through the Forest SPFA
uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem= ...
- UVa 10917 Dijkstra
本来就是水题一道. 题意:一个人要从点1去到点2,中间还有很多点和很多条边.问你如果他每次走的边(a,b)都满足:a点到目标点的最短距离<b点到目标点的最短距离,那么他从点1出发到点2总共有多少 ...
- 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 Walk Through The Forest
题意: 一个人从公司回家,他可以从A走到B如果从存在从B出发到家的一条路径的长度小于任何一条从A出发到家的路径的长度. 问这样的路径有多少条. 思路: 题意并不好理解,存在从B出发到家的一条路径的长度 ...
- UVa 10917 林中漫步
https://vjudge.net/problem/UVA-10917 题意: 给出一个图,求出从1走到2共有多少种走法.前提是他只沿着满足如下条件的道路(A,B)走:存在一条从B出发回家的路径,比 ...
- uva 10917 最短路+dp
https://vjudge.net/problem/UVA-10917 给出N点M边的无向图,没重边.对于点A,B,当且仅当从B到终点的最短路小于任何一条从A到终点的最短路时,才考虑从A走到B,否则 ...
随机推荐
- MUI - DIV窗体切换
神坑记录: 1.js报错异常:没有找到"innerHeight"属性? 解决方案:暂时不知原因,通过对mui.view.js进行调试得知是跳转目标页没有 .mui-navbar-l ...
- ACM Binary String Match
#include <stdio.h> #include <string.h> #include <stdlib.h> void SubString(char sub ...
- Android课程---单选框与复选框的实现
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="ht ...
- 新广告法,极限词剔除,替换掉的mysql语句
国家级,世界级,最高级, 最佳,最大,第一, 唯一,首个,首选, 最好,最大,精确, 顶级,最高,最低, 最,最具,最便宜, 最新,最先进,最大程度, 最新技术,最先进科学,国家级产品, 填补国内空白 ...
- symmetric multiprocessor
https://en.wikipedia.org/wiki/Symmetric_multiprocessor_system A symmetric multiprocessor system (SMP ...
- ie下如果已经有缓存,load方法的效果就无法执行.的解决方法
<script type="text/javascript"> $(document).ready(function(){ $('img') ...
- 安卓仿微信Tab页用Fragment实现
最终效果图如: 实现步骤: 新建项目tabdemo,我选的是4.0.3版本,然后依次新建三个Fragment,名字分别为:ChatFragment.FriendFragment.FindFragmen ...
- inittab 分析
内核初始化后,启动init进程/sbin/init,读取/etc/inittab文件进行初始化. 参考链接 http://wenku.baidu.com/view/5a82b5f67c1cfad619 ...
- centos7 systemctl命令
systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起. 实例: 启动nfs服务:systemctl start nfs-server.s ...
- Django,数据模型创建之数据库API参考(转载)
一旦 数据模型 创建完毕, 自然会有存取数据的需要.本文档介绍了由 models 衍生而来的数据库抽象API,及如何创建,得到及更新对象. 贯穿本参考, 我们都会引用下面的民意测验(Poll)应用程序 ...