这题需要很好的理解Dij。

在Dij的基础上,每个点多一个次短路的长度和数量进行控制。

那么在队列中,最短路控制时出现n次,次短路控制出现n次。注意松弛条件中val值和最短路、次短路的关系。

这题需要了解的是,对vis[i][0]控制确定每个点的最短路长度,对vis[i][1]控制确定每个点的次短路长度。

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
#define MAXN 10010
#define inf 100000000
int T,n,m,s,t,temp;
int head[MAXN],dis[MAXN][2],vis[MAXN][2],num[MAXN][2];
struct Node{
int a;
int kind;
int len;
friend bool operator <(Node a,Node b)
{
return a.len>b.len;
}
}start,v,tem; struct Edge{
int u,len,next;
}edge[2*MAXN]; int Dijstra(int s,int t)
{
priority_queue<Node> que;
memset(vis,0,sizeof(vis));
for(int i=0;i<MAXN;i++)
{
dis[i][0]=inf;
dis[i][1]=inf;
num[i][0]=0;
num[i][1]=0;
}
while(!que.empty())que.pop();
start.a=s;
start.kind=0;
start.len=0;
que.push(start);
dis[s][0]=0;
num[s][0]=1;
while(!que.empty())
{
v=que.top();
que.pop();
if(vis[v.a][v.kind])continue;
vis[v.a][v.kind]=1;
for(int i=head[v.a];i!=-1;i=edge[i].next)
{
int u=edge[i].u;
int len=edge[i].len;
int val=v.len+len;
if(val<dis[u][0])
{
if(dis[u][0]<dis[u][1])
{
dis[u][1]=dis[u][0];
num[u][1]=num[u][0];
tem.a=u;
tem.len=dis[u][1];
tem.kind=1;
que.push(tem);
}
dis[u][0]=val;
num[u][0]=num[v.a][0];
tem.a=u;
tem.len=val;
tem.kind=0;
que.push(tem);
}
else if(val==dis[u][0])
{
num[u][0]+=num[v.a][0];
}
else if(val<dis[u][1])
{
dis[u][1]=val;
num[u][1]=num[v.a][v.kind];
tem.a=u;
tem.kind=1;
tem.len=val;
que.push(tem);
}
else if(val==dis[u][1])
{
num[u][1]+=num[v.a][v.kind];
}
} }
if(dis[t][0]+1==dis[t][1])
return num[t][0]+num[t][1];
else return num[t][0];
} void addEdge(int v,int w,int c)
{
edge[temp].u=w;
edge[temp].len=c;
edge[temp].next=head[v];
head[v]=temp;
temp++;
}
int main()
{
scanf("%d",&T);
while(T--)
{
temp=0;
scanf("%d%d",&n,&m);
memset(head,-1,sizeof(head));
for(int i=0;i<m;i++)
{
int v,w,c;
scanf("%d%d%d",&v,&w,&c);
addEdge(v,w,c);
}
scanf("%d%d",&s,&t);
int ans=Dijstra(s,t);
printf("%d\n",ans);
}
return 0;
}

poj3463 最短路和比最短路长1的路径数的更多相关文章

  1. hdu 1595 find the longest of the shortest【最短路枚举删边求删除每条边后的最短路,并从这些最短路中找出最长的那条】

    find the longest of the shortest Time Limit: 1000/5000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  2. [模板] 次短路 | bzoj1726-[Usaco2006Nov]Roadblocks第二短路

    简介 所谓次短路, 顾名思义, 就是第二短路. :P 1到n的次短路长度必然产生于:1到x的最短路 + edge(x,y) + y到n的最短路 简单证明一下: 设 \(dis(i,j)\) 表示 \( ...

  3. CodeForces - 449B 最短路(迪杰斯特拉+堆优化)判断最短路路径数

    题意: 给出n个点m条公路k条铁路. 接下来m行 u v w      //u->v 距离w 然后k行 v w         //1->v 距离w 如果修建了铁路并不影响两点的最短距离, ...

  4. 最长绝对文件路径——算法面试刷题1(google),字符串处理,使用tree遍历dfs类似思路

    假设我们通过以下的方式用字符串来抽象我们的文件系统: 字符串"dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext"代表了: dir subdir1 su ...

  5. 最长的文件路径 Longest Absolute File Path

    2018-07-30 22:05:52 问题描述: 问题求解: 本题个人感觉还是挺有意思的,题目要求的是最长的文件路径,其实是需要keep tracking路径长度,如果出现文件则需要进行比较,看是否 ...

  6. The Super Powers UVA 11752 分析分析 求无符号长整形以内的数满足至少可以用两种不同的次方来表示。比如64 = 2^6 = 8^2; 一个数的1次方不算数。

    /** 题目:The Super Powers UVA 11752 链接:https://vjudge.net/contest/154246#problem/Y 题意:求无符号长整形以内的数满足至少可 ...

  7. [luogu] P4551 最长异或路径(贪心)

    P4551 最长异或路径 题目描述 给定一棵\(n\)个点的带权树,结点下标从\(1\)开始到\(N\).寻找树中找两个结点,求最长的异或路径. 异或路径指的是指两个结点之间唯一路径上的所有边权的异或 ...

  8. luoguP4551最长异或路径

    P4551最长异或路径 链接 luogu 思路 从\(1\)开始\(dfs\)求出\(xor\)路径.然后根据性质\(x\)到\(y\)的\(xor\)路径就是\(xo[x]^xo[y]\) 代码 # ...

  9. LeetCode 687. Longest Univalue Path 最长同值路径 (C++/Java)

    题目: Given a binary tree, find the length of the longest path where each node in the path has the sam ...

随机推荐

  1. Python用Pillow(PIL)进行简单的图像操作

    Python用Pillow(PIL)进行简单的图像操作 颜色与RGBA值 计算机通常将图像表示为RGB值,或者再加上alpha值(通透度,透明度),称为RGBA值.在Pillow中,RGBA的值表示为 ...

  2. factorOne cannot be&nb…

    factorOne cannot be resolved or is not a field 现象描述: Eclipse的使用时会在代码处出现警告factorOne cannot be resolve ...

  3. spring容器注入一个接口的两个实现类

    spring容器中能拥有两个同种类型的bean吗?我有两个dao类同时实现一个接口,这两个接口注入时报了异常如下. org.springframework.beans.factory.NoSuchBe ...

  4. Premiere&After Effects的实时预览插件开发

    一.介绍 Adobe Premiere和After Effects在影视编辑.渲染领域已经得到广泛应用.全景视频在相应工具拼接好后也可以导入Premiere/After Effects后也可进行剪辑. ...

  5. Git时光机穿梭之删除文件

    在Git中,删除也是一个修改操作,我们实战一下,先添加一个新文件test.txt到Git并且提交: $ git add test.txt $ git commit -m "add test. ...

  6. 学习笔记TF035:实现基于LSTM语言模型

    神经结构进步.GPU深度学习训练效率突破.RNN,时间序列数据有效,每个神经元通过内部组件保存输入信息. 卷积神经网络,图像分类,无法对视频每帧图像发生事情关联分析,无法利用前帧图像信息.RNN最大特 ...

  7. 解决js中post提交数据并且跳转到指定页面的问题总结

    今天在开发中过程中遇到了这个问题,js中利用JQuery中的 $.post("url", id, function(){}); 这个方法是数据提交正常,但是后台处理完成之后跳转无法 ...

  8. 菜鸟帮你跳过openstack配置过程中的坑

    一:前言 对于一个以前做java全栈工程师而言,而且没学过Linux,很少用虚拟机(还是在大学的时候简单的用过),去配置openstack我想我入的坑肯定比有基础的一定要多,躺在每个坑中徘徊思索的时间 ...

  9. jQuery.ajax success 与 complete 区别

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 天天用,不知所以然: $.ajax({       type: "post",       u ...

  10. Windows 程序注册成服务的方法

    Windows 程序注册成服务的方法 将windows 程序注册成服务这个是很多后台程序需要实现的功能,注册成服务后,你的程序就可以像windows 服务一样随系统启动,并且隐藏你的控制台界面.下面介 ...