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 ...
随机推荐
- spoj PARTIT
三维DP 第K字典序从左向右找 根据dp数组的值算出每一位该打印什么 代码: #include <cstdio> #include <cstring> using namesp ...
- javascript for
var k = ["a", "b", "c", false]; for(var i = 0, m; m = k[i]; i++) { con ...
- Ikki's Story IV - Panda's Trick
poj3207:http://poj.org/problem?id=3207 题意::平面上有一个圆,圆的边上按顺时针放着0..n-1共n个点.现在要连m条边,比如a,b,那么a到b可以从圆的内部连接 ...
- linux下mysql的安装
一.下载 http://dev.mysql.com/downloads/mysql/ 选择对应的版本,这里选择“Linux-Generic” 以64位系统为例,这里需要下载如下两个文件: MySQL- ...
- Eclipse配置Git
一.Eclipse上安装GIT插件EGit Eclipse的版本eclipse-java-helios-SR2-win32.zip(在Eclipse3.3版本找不到对应的 EGit插件,无法安装) E ...
- poj1935
给定起点和要经过的点,求最短路径我发现,关于路径的treedp,设计的关键在于每个节点的状态怎么表示对于这道题,有一种常见的方法是令f[i,1]表示经过这个点且还要回来的路径,f[i,0]表示留在以i ...
- Solr 多核(MultiCore)配置
Solr Multicore意义 Solr Multicore 是 solr 1.3 的新特性.其目的一个solr实例,可以有多个搜索应用.< xmlnamespace prefi ...
- 【EJS】
// 用=号输出,就会被escapge转义编码 <%= VARIABLE_NAME %> // 用“-”输出原始内容, 不会被escape <%- VARIABLE_NAME %&g ...
- Windows下安装和配置Maven的方法及注意事项
首先,从http://maven.apache.org/download.cgi网站上下载适用于当前操作系统操作格式的最新版本的maven安装包.如:apache-maven-3.2.5-bin.zi ...
- 使用Jquery解析Json基础知识(转)
在WEB数据传输过程中,json是以文本,即字符串的轻量级形式传递的,而客户端一般用JS操作的是接收到的JSON对象,所以,JSON对象和JSON字符串之间的相互转换.JSON数据的解析是关键. 先明 ...