uva 10917 最短路+dp
https://vjudge.net/problem/UVA-10917
给出N点M边的无向图,没重边。对于点A,B,当且仅当从B到终点的最短路小于任何一条从A到终点的最短路时,才考虑从A走到B,否则不会走A-B。一开始理解错了题意以为是走最短路的不同方案。
令f(x)表示从x到2的不同方案,则 f[2]=1, f[x]=SUM{ f[i] | connect[x][i]&&dis[i]<dis[x] } dis[x]表示x-2的最短路长度。记忆化搜索就好了。
换言之要想要走A-B这条路必须满足的条件就是dis[B]<dis[A],只要看透这一点就容易多了!!!
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
#define inf 0x3f3f3f3f
const int maxn=;
vector<int>g[maxn];
int e[][],dis[],f[];
void dij(int N)
{
bool vis[];
memset(vis,,sizeof(vis));
memset(dis,inf,sizeof(dis));
dis[]=;
for(int i=;i<=N;++i)
{
int w=inf,u=-;
for(int j=;j<=N;++j)
if(vis[j]==&&dis[j]<w) { w=dis[j]; u=j;}
vis[u]=;
for(int j=;j<=N;++j)
if(!vis[j]&&e[u][j]!=inf&&dis[j]>dis[u]+e[u][j])
dis[j]=dis[u]+e[u][j];
}
}
int dfs(int x)
{
if(f[x]!=-) return f[x];
int s=;
for(int i=;i<g[x].size();++i)
{
int u=g[x][i];
if(dis[u]<dis[x]) s+=dfs(u);
}
return f[x]=s;
}
int main()
{
int N,M,i,j,k;
while(cin>>N&&N){cin>>M;
int u,v,w;
memset(e,inf,sizeof(e));
memset(f,-,sizeof(f));
for(i=;i<=N;++i) e[i][i]=;
for(i=;i<=M;++i)
{
scanf("%d%d%d",&u,&v,&w);
g[u].push_back(v);
g[v].push_back(u);
e[u][v]=e[v][u]=w;
}
dij(N);f[]=;
printf("%d\n",dfs());
for(i=;i<=N;++i)
g[i].clear();
}
return ;
}
/*
5 6
1 3 2
1 4 2
3 4 3
1 5 12
4 2 34
5 2 24 7 8
1 3 1
1 4 1
3 7 1
7 4 1
7 5 1
6 7 1
5 2 1
6 2 1 2
4 */
uva 10917 最短路+dp的更多相关文章
- 训练指南 UVA - 10917(最短路Dijkstra + 基础DP)
layout: post title: 训练指南 UVA - 10917(最短路Dijkstra + 基础DP) author: "luowentaoaa" catalog: tr ...
- UVA - 10917 - Walk Through the Forest(最短路+记忆化搜索)
Problem UVA - 10917 - Walk Through the Forest Time Limit: 3000 mSec Problem Description Jimmy exp ...
- hdu 4568 Hunter 最短路+dp
Hunter Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- BZOJ_1003_[ZJOI2006]物流运输_最短路+dp
BZOJ_1003_[ZJOI2006]物流运输_最短路+dp 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1003 分析: 这种一段一段的显 ...
- UVA.674 Coin Change (DP 完全背包)
UVA.674 Coin Change (DP) 题意分析 有5种硬币, 面值分别为1.5.10.25.50,现在给出金额,问可以用多少种方式组成该面值. 每种硬币的数量是无限的.典型完全背包. 状态 ...
- POJ 3635 Full Tank? 【分层图/最短路dp】
任意门:http://poj.org/problem?id=3635 Full Tank? Time Limit: 1000MS Memory Limit: 65536K Total Submis ...
- uva 10817(数位dp)
uva 10817(数位dp) 某校有m个教师和n个求职者,需讲授s个课程(1<=s<=8, 1<=m<=20, 1<=n<=100).已知每人的工资c(10000 ...
- [USACO07NOV]牛继电器Cow Relays (最短路,DP)
题目链接 Solution 非正解 似乎比较蛇啊,先个一个部分分做法,最短路+\(DP\). 在求最短路的堆或者队列中存储元素 \(dis_{i,j}\) 代表 \(i\) 这个节点,走了 \(j\) ...
- P1772 [ZJOI2006]物流运输 最短路+DP
思路:最短路+DP 提交:1次 题解: $f[i]$表示到第$i$天的最小代价,我们可以预先处理出$i,j$两天之间(包括$i,j$)都可通行的最短路的代价记做$s[i][j]$,然后有$f[i]=m ...
随机推荐
- jQuery 属性操作
1 css操作 2 文本操作 3 属性操作 4 位置 5 尺寸 1.css操作 addClass();// 添加指定的CSS类名. removeClass();// 移除指定的CSS类名. hasCl ...
- vuejs组件通信
<body> <div id="example"> <father></father> </div> </body ...
- Pycharm中SQL语句提示SQL Dialect is Not Configured
解决办法: 在File---->Setting--->Languages & Frameworks--->SQL Dialects中,选择对应的数据库,如MySQL,之后点击 ...
- 017-Spring Boot AOP
一.概述 面向切面编程,将业务代码与处理琐碎相关度少的代码隔离开.以便达到重用,解耦. 用途:日志记录.权限处理.性能统计.监控.事务处理.异常处理等 通知类型有:前置通知.后置最终通知.后置返回通知 ...
- HTTP1.1中CHUNKED编码解析
一般HTTP通信时,会使用Content-Length头信息性来通知用户代理(通常意义上是浏览器)服务器发送的文档内容长度,该头信息定义于HTTP1.0协议RFC 1945 10.4章节中.浏览器 ...
- vue-cli 搭建项目
1.cnpm install -g vue-cli 2.vue -V(注意大写,查vue版本) 3.vue init webpack vue1(创建vue1目录) 4.cd vue1(定位到目录中) ...
- Kafka简介、安装
一.Kafka简介 Kafka是一个分布式.可分区的.可复制的消息系统.几个基本的消息系统术语:1.消费者(Consumer):从消息队列(Kafka)中请求消息的客户端应用程序.2.生产者(Prod ...
- Jquery.ScrollLoading图片延迟加载技术
关于分屏加载图片,像天猫.京东等电商图片较多页面很长,就采用了延迟加载技术. 目前很流行的做法就是滚动动态加载,显示屏幕之外的图片默认是不加载的, 随着页面的滚动,显示区域图片才被动态加载. 原理其实 ...
- 微服务架构~BFF和网关是如何演化出来的
介绍 BFF(Backend for Frontend)和网关Gateway是微服务架构中的两个重要概念,这两个概念相对比较新,有些开发人员甚至是架构师都不甚理解. 本文用假想的公司案例+图示的方式, ...
- Windos Server Tomcat 双开配置
Tomcat 双开配置 tomcat_1 server.mxl文件 # 修改端口 <Connector port=" protocol="HTTP/1.1" c ...