题目:http://poj.org/problem?id=3463

当然要给一个点记最短路和次短路的长度和方案。

但往优先队列里放的结构体和vis竟然也要区分0/1,就像把一个点拆成两个点了一样。

不要区分k的fx。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int N=,M=;
int T,n,m,head[N],xnt,dis[N][],f[N][],st,en;
bool vis[N][];
struct Ed{
int next,to,w;
Ed(int n=,int t=,int z=):next(n),to(t),w(z) {}
}ed[M];
struct Node{
int bh,dis;bool fx;
Node(int b=,int d=,bool f=):bh(b),dis(d),fx(f) {}
bool operator< (const Node &b)const
{
return dis>b.dis;
}
};
void add(int x,int y,int z)
{
ed[++xnt]=Ed(head[x],y,z);head[x]=xnt;
}
void dj()
{
memset(vis,,sizeof vis);memset(dis,,sizeof dis);
memset(f,,sizeof f);
priority_queue<Node> q;
dis[st][]=;//dis[st][1]
f[st][]=;//!
q.push(Node(st,,));//no push [1]
while(q.size())
{
Node t=q.top();q.pop();int k=t.bh;bool fx=t.fx;
while(q.size()&&vis[k][fx])t=q.top(),q.pop(),k=t.bh,fx=t.fx;
if(vis[k][fx])break;vis[k][fx]=;
for(int i=head[k],v;i;i=ed[i].next)//不要区分fx,[k][1]也能更新[v][0]!
{
int d=dis[k][fx],w=ed[i].w;
if(d+w<dis[v=ed[i].to][])
{
dis[v][]=dis[v][];f[v][]=f[v][];
dis[v][]=d+w;f[v][]=f[k][fx];
q.push(Node(v,dis[v][],));
q.push(Node(v,dis[v][],));//!because zj's [1] also has been pshp
}
else if(d+w==dis[v][])
f[v][]+=f[k][fx];
else if(d+w<dis[v][])
{
dis[v][]=d+w;f[v][]=f[k][fx];
q.push(Node(v,dis[v][],));
}
else if(d+w==dis[v][])
f[v][]+=f[k][fx];
}
}
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
memset(head,,sizeof head);xnt=;
int x,y,z;
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);add(x,y,z);
}
scanf("%d%d",&st,&en);
dj();
if(dis[en][]==dis[en][]+)f[en][]+=f[en][];
printf("%d\n",f[en][]);
}
return ;
}

poj 3463 Sightseeing——次短路计数的更多相关文章

  1. POJ - 3463 Sightseeing 最短路计数+次短路计数

    F - Sightseeing 传送门: POJ - 3463 分析 一句话题意:给你一个有向图,可能有重边,让你求从s到t最短路的条数,如果次短路的长度比最短路的长度多1,那么在加上次短路的条数. ...

  2. poj 3463 Sightseeing( 最短路与次短路)

    http://poj.org/problem?id=3463 Sightseeing Time Limit: 2000MS   Memory Limit: 65536K Total Submissio ...

  3. poj 3463 Sightseeing(次短路+条数统计)

    /* 对dij的再一次理解 每个点依旧永久标记 只不过这里多搞一维 0 1 表示最短路还是次短路 然后更新次数相当于原来的两倍 更新的时候搞一下就好了 */ #include<iostream& ...

  4. POJ 3463 Sightseeing (次短路)

    题意:求两点之间最短路的数目加上比最短路长度大1的路径数目 分析:可以转化为求最短路和次短路的问题,如果次短路比最短路大1,那么结果就是最短路数目加上次短路数目,否则就不加. 求解次短路的过程也是基于 ...

  5. POJ 3463 Sightseeing (次短路经数)

    Sightseeing Time Limit: 2000MS   Memory Limit: 65536K Total Submissions:10005   Accepted: 3523 Descr ...

  6. POJ 3463 Sightseeing 【最短路与次短路】

    题目 Tour operator Your Personal Holiday organises guided bus trips across the Benelux. Every day the ...

  7. poj3463 Sightseeing——次短路计数

    题目:http://poj.org/problem?id=3463 次短路计数问题,在更新最短路的同时分类成比最短路短.长于最短路而短于次短路.比次短路长三种情况讨论一下,更新次短路: 然而其实不必被 ...

  8. POJ 3463 Sightseeing 题解

    题目 Tour operator Your Personal Holiday organises guided bus trips across the Benelux. Every day the ...

  9. POJ 3463 Sightseeing

    最短路+次短路(Dijkstra+priority_queue) 题意是要求你找出最短路的条数+与最短路仅仅差1的次短路的条数. 開始仅仅会算最短路的条数,和次短路的长度.真是给次短路条数跪了.ORZ ...

随机推荐

  1. java中类名.class, class.forName(), getClass()区别

    Class对象的生成方式如下: 1.类名.class           说明: JVM将使用类装载器, 将类装入内存(前提是:类还没有装入内存),不做类的初始化工作.返回Class的对象 2.Cla ...

  2. 超酷Loading进度条

    在线演示 本地下载

  3. linux shell执行SQL脚本

    #!/bin/sh user="user" pass="pass" sqlplus -S $user/$pass select 1 from dual; exi ...

  4. 【codevs1993】草地排水(最大流)

    最近学了最大流,于是去codevs找了几道最大流裸题(这是我第一次写网络流). 题目大意:求一个图的最大流(就是这样的裸题) 第一次A网络流的题,发个博客纪念一下. var n,m,i,j,k,h,t ...

  5. MySQL操作的相关命令

    拷贝表,并且复制两条数据到新表中 create table t_comments_sample2 like t_comments_sample; #拷贝表结构 ,;#复制两条数据 MySQL Work ...

  6. mac 下面配置gradle

    最近刚开始用gradle,先向大家介绍一下怎么配置gradle的环境变量吧: 1.下载最新安装包gradle-xxx-all.zip:http://www.gradle.org,并解压到/Users/ ...

  7. PrepareStatement

    import java.sql.DriverManager; import java.sql.Connection; import java.sql.PreparedStatement; import ...

  8. python基础4 - 判断(if)语句

    6. 判断(if)语句 6.1 if 判断语句基本语法 在 Python 中,if 语句 就是用来进行判断的,格式如下: if 要判断的条件: 条件成立时,要做的事情 …… 注意:代码的缩进为一个 t ...

  9. Redis简介 & 与Memcache的区别

    redis 是一个基于内存的高性能key-value数据库.   Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操 ...

  10. 绑定当前对象例子——Tag="{Binding}"

    <TreeView Margin="10,5,0,0" HorizontalAlignment="Left"  VerticalAlignment=&qu ...