poj 3463 Sightseeing(次短路+条数统计)
/*
对dij的再一次理解
每个点依旧永久标记
只不过这里多搞一维
0 1 表示最短路还是次短路
然后更新次数相当于原来的两倍
更新的时候搞一下就好了
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#define maxn 1010
using namespace std;
int T,n,m,num,head[maxn],dis[maxn][],f[maxn][],c[maxn][];
struct edge{
int v,t,pre;
}e[maxn*];
struct node{
int k,r,t;
bool operator < (const node &x) const{
return t>x.t;
}
};
priority_queue<node>q;
int init(){
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
void Clear(){
for(int i=;i<=n;i++)
head[i]=;
num=;
while(!q.empty())q.pop();
}
void Add(int from,int to,int dis){
num++;e[num].v=to;
e[num].t=dis;
e[num].pre=head[from];
head[from]=num;
}
void Dij(int u,int v){
memset(dis,/,sizeof(dis));
memset(f,,sizeof(f));
memset(c,,sizeof(c));
c[u][]=;
dis[u][]=;
q.push((node){u,,});
while(!q.empty()){
int k=q.top().k;int r=q.top().r;
q.pop();if(f[k][r])continue;
f[k][r]=;
for(int i=head[k];i;i=e[i].pre){
int v=e[i].v;
if(dis[v][]>dis[k][r]+e[i].t){
dis[v][]=dis[v][];
c[v][]=c[v][];
dis[v][]=dis[k][r]+e[i].t;
c[v][]=c[k][r];
q.push((node){v,,dis[v][]});
q.push((node){v,,dis[v][]});
}
else if(dis[v][]==dis[k][r]+e[i].t){
c[v][]+=c[k][r];
q.push((node){v,,dis[v][]});
}
else if(dis[v][]>dis[k][r]+e[i].t){
dis[v][]=dis[k][r]+e[i].t;
c[v][]=c[k][r];
q.push((node){v,,dis[v][]});
}
else if(dis[v][]==dis[k][r]+e[i].t){
c[v][]+=c[k][r];
q.push((node){v,,dis[v][]});
}
}
}
int ans=c[v][];
if(dis[v][]==dis[v][]+)ans+=c[v][];
printf("%d\n",ans);
}
int main()
{
T=init();
while(T--){
n=init();m=init();
int u,v,t;Clear();
for(int i=;i<=m;i++){
u=init();v=init();t=init();
Add(u,v,t);
}
u=init();v=init();
Dij(u,v);
}
return ;
}
poj 3463 Sightseeing(次短路+条数统计)的更多相关文章
- POJ 3463 Sightseeing (次短路)
题意:求两点之间最短路的数目加上比最短路长度大1的路径数目 分析:可以转化为求最短路和次短路的问题,如果次短路比最短路大1,那么结果就是最短路数目加上次短路数目,否则就不加. 求解次短路的过程也是基于 ...
- poj 3463 Sightseeing( 最短路与次短路)
http://poj.org/problem?id=3463 Sightseeing Time Limit: 2000MS Memory Limit: 65536K Total Submissio ...
- POJ - 3463 Sightseeing 最短路计数+次短路计数
F - Sightseeing 传送门: POJ - 3463 分析 一句话题意:给你一个有向图,可能有重边,让你求从s到t最短路的条数,如果次短路的长度比最短路的长度多1,那么在加上次短路的条数. ...
- poj 3463 Sightseeing——次短路计数
题目:http://poj.org/problem?id=3463 当然要给一个点记最短路和次短路的长度和方案. 但往优先队列里放的结构体和vis竟然也要区分0/1,就像把一个点拆成两个点了一样. 不 ...
- HDU 1688 Sightseeing 【输出最短路+次短路条数】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1688 题目大意:给n个点,m条有向边.再给出起点s, 终点t.求出s到t的最短路条数+次短路条数. 思 ...
- POJ 3463 Sightseeing
最短路+次短路(Dijkstra+priority_queue) 题意是要求你找出最短路的条数+与最短路仅仅差1的次短路的条数. 開始仅仅会算最短路的条数,和次短路的长度.真是给次短路条数跪了.ORZ ...
- HDU3191 【输出次短路条数】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3191 How Many Paths Are There Time Limit: 2000/1000 M ...
- POJ 3463 Sightseeing (次短路经数)
Sightseeing Time Limit: 2000MS Memory Limit: 65536K Total Submissions:10005 Accepted: 3523 Descr ...
- HDU 1688 Sightseeing&HDU 3191 How Many Paths Are There(Dijkstra变形求次短路条数)
Sightseeing Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
随机推荐
- 自己写的carousel
可以 function appendRight() { //alert("right"); lastItem = itemsRight[urls.length - ]; first ...
- 在html页面中利用ftp访问协议格式载入服务器图片
访问格式为:ftp://用户名:密码@服务器ip:服务器端口/具体文件路径 如下所示: <img src="ftp://lxj:123@127.0.0.1:21/IMG_2013051 ...
- 关于下拉刷新你是否真的非常理解还是只会搬砖?附 Android 实例子源代码文件下载地址380个合集
1,推荐几篇非常有用的博文 原创写的真的非常好 主要讲解原理,整体布局三部分组成以及设置padding等等作用, 下拉的具体实现 滑动到底部具体加载以及判断手势事件,再次推荐作者的 详细讲解 建议先看 ...
- Unity3d 基于物理渲染Physically-Based Rendering之实现
根据前文的例子http://blog.csdn.net/wolf96/article/details/44172243(不弄超链接了审核太慢)弄一下真正的基于物理的渲染逃了节课= =,弄了一下.公式和 ...
- POJ 2260(ZOJ 1949) Error Correction 一个水题
Description A boolean matrix has the parity property when each row and each column has an even sum, ...
- JavaScript高级程序设计20.pdf
用户代理检测 为了不在全局作用域中添加多余的变量,我们使用模块增强模式来封装检测脚本 以下是完整的用户代理字符串检测脚本,包括检测呈现引擎.平台.Window操作系统.移动设备和游戏系统 var cl ...
- C# Dictionary的xml序列化
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
- top N彻底解秘
本博文内容: 1.基础Top N算法实战 2.分组Top N算法实战 3.排序算法RangePartitioner内幕解密 1.基础Top N算法实战 Top N是排序,Take是直接拿出几个元素,没 ...
- Ubuntu 下安装opencv 编译后执行找不到库
在ubuntu下编译opencv程序后,执行报下面到错误:error while loading shared libraries: libopencv_core.so.2.4: cannot ope ...
- zendstudio xdebug 配置
1. 下载XDebug: http://www.xdebug.org/download.php 通过phpinfo()查看你的php版本,现在相对应的dll文件