题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1142

思路:1、不是求最短路径,而是求如果两个点A,B直接相连,且A到终点的距离大于B到终点的距离,求这样A,B之间的通路的个数。

2、以终点为起点来进行dij

3、记忆化搜索是,用p[i]数组记录符合条件的路径数量。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = ;
const int INF = ;
int n,m,vis[maxn],dis[maxn],e[maxn][maxn],p[maxn];
void Init()
{
int i,j;
memset(vis,,sizeof(vis));
memset(p,,sizeof(p));
for(i=;i<=n;i++)
for(j=;j<=n;j++)
{
if(i==j) e[i][j]=;
else e[i][j]=INF;
}
}
void Dij()
{
int pos,mx,i,j;
for(i=;i<=n;i++) dis[i]=e[][i];
dis[]=;
vis[]=;
for(i=;i<n;i++)
{
mx=INF,pos=-;
for(j=;j<=n;j++)
{
if(vis[j]==&&mx>dis[j])
{
mx=dis[j];
pos=j;
}
}
if(pos<) break;
vis[pos]=;
for(j=;j<=n;j++)
{
if(vis[j]==&&dis[j]>dis[pos]+e[pos][j]&&e[pos][j]!=INF)
{
dis[j]=dis[pos]+e[pos][j];
}
}
}
}
int Dfs(int s)
{
int i,sum=;
if(p[s]) return p[s];
if(s==) return ;
for(i=;i<=n;i++)
{
if(e[s][i]!=INF&&dis[s]>dis[i])
{
if(p[i]) sum+=p[i];
else sum+=Dfs(i);
}
}
sum+=p[s];
p[s]=sum;
return sum;
}
int main(void)
{
int i,j,x,y,z;
while(~scanf("%d",&n)&&n)
{
scanf("%d",&m);
Init();
for(i=;i<m;i++)
{
scanf("%d%d%d",&x,&y,&z);
e[x][y]=e[y][x]=z;
}
Dij();
printf("%d\n",Dfs());
}
return ;
}

hdu-1142(记忆化搜索+dij)的更多相关文章

  1. hdu 4722(记忆化搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4722 思路:简单的记忆化搜索,留意一下A==0时的情况就可以了. #include<iostre ...

  2. HDU 4597 记忆化搜索

    ² 博弈取牌—记忆化搜索 题目描述: 有两副带有数字的牌,(数字>0)两人轮流取,取中了某张牌,自己的分数就加上牌上的数字,但只能从两端取,每人都会用最优的策略使得自己的分数最高.问A先取,他能 ...

  3. hdu 1514 记忆化搜索

    题意是给4堆(堆的高度小于等于40)有颜色(颜色的种类小于等于20)的物品,你有一个篮子最多能装5件物品,每次从这4堆物品里面任取一件物品放进篮子里,但是取每堆物品时,必须先取上面的物品,才能取下面的 ...

  4. hdu 1208 记忆化搜索

    题目大意:只能按照格子上的数字*方向走,从左上走到右下Sample Input42331121312313110Sample Output3 直接记忆化搜索,注意是0的情况 #include<c ...

  5. hdu 4960 记忆化搜索 DP

    Another OCD Patient Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Ot ...

  6. hdu 2089 记忆化搜索写法(数位dp)

    /* 记忆化搜索,第二维判断是否是6 */ #include<stdio.h> #include<string.h> #define N 9 int dp[N][2],digi ...

  7. Hdu 4597记忆化搜索

    好久没有做题了,水平已经完全在学弟之下了. 一个吉林邀请赛最水的题目.:( 其实这题一看到数据范围,只可以想到思路,直接爆搜,加个记忆化. 这题虽然A了,但是我还是没太想清楚一些边界情况,心虚着A了. ...

  8. HDU 1978 记忆化搜索(dfs+dp)

    Y - How many ways Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  9. hdu 1078(记忆化搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078 //dp[i][j]表示从点i,j处开始能获得的最多cheese #include <io ...

随机推荐

  1. UI5-文档-4.25-Sorting and Grouping

    为了使我们的发票列表更加用户友好,我们将它按字母顺序排序,而不是仅仅显示来自数据模型的顺序.此外,我们还引入了组,并添加了发布产品的公司,以便更容易使用数据. Preview The list is ...

  2. javascript获取事件源对象和产生事件的对象

    事件源对象是指event对象,其封装了与事件相关的详细信息,比如按键状态. 获取事件源对象的方法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1. ...

  3. go语言channel的别样用法

    1.返回值使用通道 func main() { // 生成随机数作为一个服务 randService := randGenerator() // 从服务中读取随机数并打印 fmt.Printf(&qu ...

  4. python中迭代器(转)

    一.迭代器与for语句 网上许多文章说Python的for语句中,in关键字后面的对象是一个集合.例如 for i in [1,2,3] print i 上面代码中in关键字后面的对象[1,2,3]是 ...

  5. Group by 内部排序

    1.right join #  update_time  gid=>sid, group_status => s_table select a.* from comment as a ri ...

  6. rabbitmq web管理界面 用户管理

    安装最新版本的rabbitmq(3.3.1),并启用management plugin后,使用默认的账号guest登陆管理控制台,却提示登陆失败. 翻看官方的release文档后,得知由于账号gues ...

  7. 关于easyui-datagrid数据表格, 分页取出数据

    在制作数据表格的时候有一个这样的属性, pagination是否显示分页列表, 分页显示的时候需要分别从数据库中取数据, 每页显示几行, 即只从数据库取出几行数据来显示, 具体代码如下 1, 显示页面 ...

  8. Web开发: servlet的session为null?

    servlet的session(会话)显示为null,一般是web.xml中配置不对或者在浏览器输入的url不正确造成的. web.xml配置如下: <servlet> <servl ...

  9. C++调试帮助

    assert预处理宏 assert是一种预处理宏,所谓预处理其实是一个预处理变量,其行为类似于内联函数,assert宏使用一个表达式作为其条件: assert(expr) 首先是对expr进行求值,如 ...

  10. 了解大数据的特点、来源与数据呈现方式以及用Python写Mad Libs游戏

    作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2620. 1.浏览2019春节各种大数据分析报告,例如: 这世间,再 ...