用新模板阿姨了一天,换成原来的一遍就ac了= =

题意很重要。。最关键的一句话是说:若走A->B这条边,必然是d[B]<d[A],d[]数组保存的是各点到终点的最短路。

所以先做dij,由d[B]<d[A]可知,所走的路径上各点的d[]值是由大到小的,即是一个DAG,从而决定用记忆化搜索查找总的路径数。

 #include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std; const int MAXN=;
const int INF =0x0fffff; int G[MAXN][MAXN],vis[MAXN],d[MAXN],n;
int mark[MAXN],dp[MAXN]; void dij(int n)
{
memset(vis,,sizeof(vis));
for(int i=;i<=n;i++)
if(i==)d[i]=;
else d[i]=INF;
for(int i=;i<n;i++)
{
int x,m=INF;
for(int y=;y<=n;y++)
if(!vis[y]&&d[y]<m){
x=y;
m=d[x];
}
vis[x]=;
for(int y=;y<=n;y++)
if(d[y]>d[x]+G[x][y])
d[y]=d[x]+G[x][y];
}
} int dfs(int u,int ed)
{
if(mark[u])
return dp[u];
mark[u]=;
if(u==ed){
dp[u]=;
return dp[u];
}
int ans=;
for(int i=;i<=n;i++)
{
if(G[u][i]!=INF&&d[i]<d[u])
ans+=dfs(i,ed);
}
dp[u]=ans;
return dp[u];
} int main()
{
int m,u,v,c;
while(~scanf("%d",&n))
{
if(!n)
return ;
scanf("%d",&m);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(i==j)G[i][j]=;
else G[i][j]=INF;
for(int i=;i<m;i++)
{
scanf("%d%d%d",&u,&v,&c);
if(G[u][v]>c)
G[u][v]=G[v][u]=c;
} dij(n); memset(mark,,sizeof(mark));
printf("%d\n",dfs(,)); }
return ;
}

后记:

回顾这道题,想到了一个问题:两点之间可以存在重边,用邻接表存储,同一条路线会被重复计算。e.g:1->2->3,即d[1]>d[2]>d[3],如果1->2有两条路,那么这两条路都符合d[1]>d[2]的条件。虽然题目中描述Jimmy想从不同的路线经过,而事实上应该是不算重边的。

最新文章

  1. Java注解教程及自定义注解
  2. HDOJ 3622 - Bomb Game 2-sat+二分....细心...
  3. alertify、js、css 使用简介
  4. PHP识别电脑还是手机访问网站
  5. accp8.0转换教材第6章连接MySQL理解与练习
  6. Java并发编程有多难?这几个核心技术你掌握了吗?
  7. 本地广播 localBroadcastManager Android
  8. C# 对串口的操作
  9. 在经过身份验证的服务中不支持跨域 javascript 回调
  10. SQL FOR JSON PATH 返回 json
  11. 三十六、Linux 线程——线程基本概念及线程的创建和终止
  12. list按照某个元素进行排序
  13. window的三大功能,行内样式获取的讲解 getcomputerStyle
  14. JavaScript -- Window-Interval
  15. 浅谈DNS域名解析
  16. spring-security-4 (3)spring security过滤器的创建与注册原理
  17. The 15th UESTC Programming Contest Preliminary M - Minimum C0st cdoj1557
  18. 华为EPON OLT开局配置
  19. symbol lookup error *** , undefined symbol 错误
  20. Centos7更改网卡名为eth0

热门文章

  1. 1070: [SCOI2007]修车 - BZOJ
  2. CKFinder 1.4.3 任意文件上传漏洞
  3. Public, Private and Protect
  4. POJ 2912 Rochambeau(难,好题,枚举+带权并查集)
  5. SQL事物用法【转】
  6. java基础知识回顾之java Thread类学习(七)--java多线程安全问题(死锁)
  7. java基础知识回顾之java集合类-Properties集合
  8. Win7 64 安装Visual Studio 2010和SQL Server 2008 R2
  9. Project Euler 80:Square root digital expansion 平方根数字展开
  10. lintcode:1-10题