poj 3463 次短路
题意:给定一个有向图,问从起点到终点,最短路+比最短路距离长1的路的个数。
当年数据结构课程设计用A*做过,现在忘光了,2333
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
#define VM 1005
#define EM 10010
using namespace std;
const int inf=0x3f3f3f3f;
int head[VM],cnt[VM][],dist[VM][],vis[VM][];//dis[i][0]为最短路,dis[i][1]为次短路
int e,src,des,n,m;
struct E
{
int to,w,next;
} edge[EM];
void add(int cu,int cv,int cw)
{
edge[e].to=cv;
edge[e].w=cw;
edge[e].next=head[cu];
head[cu]=e ++;
}
int dij()
{
int i,j,u,min,flag;
memset(dist,0x3f,sizeof(dist));
memset(vis,,sizeof(vis));
memset(cnt,,sizeof(cnt));
dist[src][]=;
cnt[src][]=;
for(i=;i<*n;i++)
{
min=inf;
for(j=;j<=n;j++) //找新的最短路和次短路
if(!vis[j][]&&dist[j][]<min)
{
u=j;
flag=;
min=dist[j][];
}
else if(!vis[j][]&&dist[j][]<min)
{
u=j;
flag=;
min=dist[j][];
}
if(min==inf)
break;
vis[u][flag]=;
for(j=head[u];j!=-;j=edge[j].next)
{
int v=edge[j].to;
int w=edge[j].w+min;
if(dist[v][]>w) //如果找到的新的值比最短路小,则更新最短路和次短路的值
{
dist[v][]=dist[v][];//更新次短路
dist[v][]=w;// 更新最短路
cnt[v][]=cnt[v][];
cnt[v][]=cnt[u][flag];//更新最短路和次短路的个数 }
else if(dist[v][]==w) //如果值等于最短路
cnt[v][]+=cnt[u][flag];//更新最短路的个数
else if(dist[v][]>w) //如果找到的值小于次短路的值,更新次短路
{
dist[v][]=w; //更新次短路的值
cnt[v][]=cnt[u][flag]; //更新次短路的个数
}
else if(dist[v][]==w) //如果找到的值等于次短路的值
cnt[v][]+=cnt[u][flag];//更新次短路的个数
} }
if(dist[des][]+==dist[des][])//如果次短路的值等于最短路值+1
cnt[des][]+=cnt[des][];
return cnt[des][];
}
int main()
{
int T,u,v,w;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
memset(head,0xff,sizeof(head));
e=;
while(m--)
{
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
}
scanf("%d%d",&src,&des);
int ans=dij();
printf("%d\n",ans);
}
return ;
}
poj 3463 次短路的更多相关文章
- poj 3463 最短路与次短路&&统计个数
题意:求最短路和比最短路长度多1的次短路的个数 本来想图(有)方(模)便(版)用spfa的,结果妹纸要我看看dijkstra怎么解.... 写了三遍orz Ver1.0:堆优化+邻接表,WA //不能 ...
- poj 3463 最短路+次短路
独立写查错不能,就是维护一个次短路的dist 题意:给定一个有向图,问从起点到终点,最短路+比最短路距离长1的路的个数. Sample Input25 81 2 31 3 21 4 52 3 12 5 ...
- poj 3463 最短路与次短路的方案数求解
Sightseeing Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8968 Accepted: 3139 Descr ...
- POJ - 3463 Sightseeing 最短路计数+次短路计数
F - Sightseeing 传送门: POJ - 3463 分析 一句话题意:给你一个有向图,可能有重边,让你求从s到t最短路的条数,如果次短路的长度比最短路的长度多1,那么在加上次短路的条数. ...
- Heavy Transportation POJ 1797 最短路变形
Heavy Transportation POJ 1797 最短路变形 题意 原题链接 题意大体就是说在一个地图上,有n个城市,编号从1 2 3 ... n,m条路,每条路都有相应的承重能力,然后让你 ...
- poj 3463 Sightseeing( 最短路与次短路)
http://poj.org/problem?id=3463 Sightseeing Time Limit: 2000MS Memory Limit: 65536K Total Submissio ...
- poj 3463/hdu 1688 求次短路和最短路个数
http://poj.org/problem?id=3463 http://acm.hdu.edu.cn/showproblem.php?pid=1688 求出最短路的条数比最短路大1的次短路的条数和 ...
- poj 3463 Sightseeing——次短路计数
题目:http://poj.org/problem?id=3463 当然要给一个点记最短路和次短路的长度和方案. 但往优先队列里放的结构体和vis竟然也要区分0/1,就像把一个点拆成两个点了一样. 不 ...
- POJ 3463 有向图求次短路的长度及其方法数
题目大意: 希望求出走出最短路的方法总数,如果次短路只比最短路小1,那也是可取的 输出总的方法数 这里n个点,每个点有最短和次短两种长度 这里采取的是dijkstra的思想,相当于我们可以不断找到更新 ...
随机推荐
- JS获取元素内容属性以及修改
1.通过document对象
- Oracle中varchar2(XX)和varchar2(XX byte)区别
这两个相不相同是由参数NLS_LENGTH_SEMANTICS决定的,有两个单位,char(字符)或者字节(byte),该参数默认值为BYTE. alter session set nls_lengt ...
- cocos2d-x 日志...
cocos2d-x 日志... http://blog.csdn.net/themagickeyjianan/article/details/39008297http://blog.csdn.net ...
- mac下PHPStorm2018.2破解教程
1.首先安装phpstorm 2.下载JetbrainsCrack-3.1-release-enc.jar然后把这个文件放入安装phpstorm/contents/lib目录下 3.用文本编辑器打开p ...
- 【直播预告】云栖直播:阿里热修复产品HotFix2.0升级详解
全面——你知道吗?1891年,卡尔森纳做出的第一把瑞士军刀,只有螺丝刀和开罐器.经过一代又一代能工巧匠的打磨,这把刀陆续增加了锯子.剪刀.镊子.放大镜.改锥,甚至内藏激光.LED手电筒.USB记忆碟等 ...
- 使用Github的gh-pages分支展示一个页面
Github有一个Github pages的功能可以搭建博客或者托管网页,是免费使用的. 首先你的注册Github账号 下载安装git Github官网操作 登录到Github上,创建一个名为 Git ...
- javascript重要类方法笔记
三.数据结构和map 1.大括号数据结构:{} 1.1 键值对形式,类似Map 1.2 var treeNode={}; treeNode ...
- Owin 自定义中间件
/// <summary> /// 自定义的中间件 /// </summary> public class CustomMiddleware : OwinMiddleware ...
- CCF CSP 201709-1 打酱油
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-1 打酱油 问题描述 小明带着N元钱去买酱油.酱油10块钱一瓶,商家进行促销,每买 ...
- php判断是否是ajax提交 方法
/** * 判断是否是AJAX提交 * @return bool */ function is_ajax() { if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) ...