POJ3463 Sightseeing——最短路的信息附带
2014-09-08 16:25
330 查看
题目链接点击打开链接
题意:求最短路和比最短路大1的路径的数目。
思路:求最短路和次短路,如果次短路比最短路大1,两者数量相加,否则结果就是最短路的数目。用ans数组记录路径数目。要理解dij的实质,每一个点访问两次,即可求得最短路和次短路~
此题要使用邻接表来做。
AC代码
题意:求最短路和比最短路大1的路径的数目。
思路:求最短路和次短路,如果次短路比最短路大1,两者数量相加,否则结果就是最短路的数目。用ans数组记录路径数目。要理解dij的实质,每一个点访问两次,即可求得最短路和次短路~
此题要使用邻接表来做。
AC代码
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<iomanip> #include<algorithm> #include<cmath> #include<queue> #include<map> #include<vector> #include<set> #include<stack> typedef long long ll; #define pi acos(-1) #define eps 1e-6; using namespace std; const int inf=1<<28; const int NV=1005; const int NE=10005; int dis[NV][2],vis[NV][2],head[NV],ans[NV][2],ecnt; struct edge { int v,next,l; } E[NE]; void add(int u,int v,int l) { E[++ecnt].v=v; E[ecnt].l=l; E[ecnt].next=head[u]; head[u]=ecnt; } void init(int n) { ecnt=0; memset(ans,0,sizeof(ans)); memset(vis,0,sizeof(vis)); memset(head,-1,sizeof(head)); for(int i=0; i<=n; i++) dis[i][0]=dis[i][1]=inf; } void dij(int sta,int n) { int i,j,flag,v,l; ans[sta][0]=1; dis[sta][0]=0; for(i=1; i<2*n; i++) { int index=0,mi=inf; for(j=1; j<=n; j++) { if(!vis[j][0] && mi>dis[j][0]) mi=dis[index=j][flag=0]; else if(!vis[j][1] && mi>dis[j][1]) mi=dis[index=j][flag=1]; } if(!index) break; vis[index][flag]=1; for(j=head[index]; j!=-1; j=E[j].next) { v=E[j].v,l=E[j].l; if(dis[v][0]>mi+l) { dis[v][1]=dis[v][0]; ans[v][1]=ans[v][0]; dis[v][0]=mi+l; ans[v][0]=ans[index][flag]; } else if(dis[v][0]==mi+l) { ans[v][0]+=ans[index][flag]; } else if(dis[v][1]>mi+l) { dis[v][1]=mi+l; ans[v][1]=ans[index][flag]; } else if(dis[v][1]==mi+l) { ans[v][1]+=ans[index][flag]; } } } } int main() { int t,n,m,u,v,l,sta,ed; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); init(n); while(m--) { scanf("%d%d%d",&u,&v,&l); add(u,v,l); } scanf("%d%d",&sta,&ed); dij(sta,n); if(dis[ed][0]==dis[ed][1]-1) printf("%d\n",ans[ed][0]+ans[ed][1]); else printf("%d\n",ans[ed][0]); } return 0; }
相关文章推荐
- [POJ3463] Sightseeing(次短路 Heap + Dijkstra)
- poj3463 Sightseeing(最短路,次短路计数)
- POJ3463 Sightseeing(dijkstra求最短路+次短路)
- poj3463 Sightseeing(最短路计数+次短路计数)
- poj3463 Sightseeing --- dij最短路和次短路
- 3463 Sightseeing dijkstra求最短路和次短路
- 凌阳SPCE3200精简开发板:解决附带实验程序中printf无法输出串口调试日志信息的问题
- 发送邮件时,如何附带上中文等价名信息
- poj3463——Sightseeing
- POJ-3463 Sightseeing 最短路+记忆化搜索
- java swing mysql实现的学生信息管理系统v1.0附带视频指导教程
- poj 3463 Sightseeing(次短路+条数统计)
- poj3463 最短路和比最短路长1的路径数
- log4net写日志的时间附带时区信息
- POJ_3463_Sightseeing(最短路/次短路条数)
- POJ3463【次短路】
- poj3463 最短路和比最短路长1的路径数
- poj 3463 Sightseeing 最短路和次短路的总数
- poj 2363 Sightseeing ( 找次短路和最短路的条数 )
- poj 3463 Sightseeing(最短路和次短路)