题目: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. 交叉编译Mesa,X11lib,Qt opengl

    记录Mesa配置文件如下: Mesa版本:Mesa-10.2.3 CC=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-gcc CXX=/usr/loc ...

  2. openpyxl之excel操作

    一.读取excel中内容 1.导入模块 : from openpyxl import load_workbook 2.打开excel : workbook = load_workbook(" ...

  3. bootstrap 模态框中弹出层 input不能获得焦点且不可编辑

    bootstrap 模态框中弹出层 input不能获得焦点且不可编辑 问题描述:bs框架支持一层model层的情况下,在模态框中弹出了自定义的弹出层.发现自定义弹出层的输入框不能获得焦点且不可编辑. ...

  4. INSPIRED启示录 读书笔记 - 第16章 市场调研

    常用的市场调研工具和方法 用户调查:第一,设计调查问卷需要技巧和经验,不是一件容易的事:第二,调查结果为获得解决方案提供了一要途径,但不是解决方案本身 产品使用分析:使用分析工具记录用户使用产品的行为 ...

  5. Eclipse 换主题、皮肤、配色,换黑色主题护眼

    Eclipse写android代码时,默认的文本和框架都是白色,长时间使用,显得过于刺眼.这里介绍三种方法换黑色护眼配色. 1.系统设置里更改 2.从Eclipse Marketplace里下载主题 ...

  6. juniper设置共享上网(注意事项)

    注意:出去的 策略  ,勾上  NAT 选项  

  7. 集群环境ssh免密码登录设置

    一.准备工作 1) 用客户端工具(ssh client或者putty)连接到linux服务器.在root用户下输入命令 vi /etc/hosts,用vi编辑hosts文件,如下: #127.0.0. ...

  8. .on事件绑定多少次就会执行多少次

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. IPC 进程间通信

    linux下进程间通信的几种主要手段简介: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它 ...

  10. myeclipse发布项目

    最好不要点击restart 虽然点击run,也会发布,但是最好先点击发布. 点击restart,可能会出现tomcat关不掉又启动不了.