hdu 3191+hdu 1688(最短路+次短路)
2013-04-16 22:16
309 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3191
题意:求出次短路的长度和条数
View Code
题意:求出次短路的长度和条数
View Code
#include<iostream> #include<cstdio> #include<vector> #include<queue> using namespace std; const int MAXN=1000+10; const int inf=1<<30; struct Edge{ int v,w; }; vector<Edge>vet[MAXN]; struct Node{ int v,dist; int mark; bool operator < (const Node &p)const { return p.dist<dist; } }; int dist[MAXN][3]; int dp[MAXN][3]; bool visited[MAXN][3]; int n,m,s,e; void Dijkstra(int start,int end){ for(int i=1;i<=n;i++){ dist[i][1]=dist[i][2]=inf; } memset(visited,false,sizeof(visited)); memset(dp,0,sizeof(dp)); dist[start][1]=0; dp[start][1]=1; priority_queue<Node>Q; Node p,q; p.dist=0,p.mark=1,p.v=start; Q.push(p); while(!Q.empty()){ p=Q.top(); Q.pop(); if(visited[p.v][p.mark])continue; visited[p.v][p.mark]=true; for(int i=0;i<vet[p.v].size();i++){ int v=vet[p.v][i].v; int w=vet[p.v][i].w; if(!visited[v][1]&&p.dist+w<dist[v][1]){ if(dist[v][1]!=inf){ dist[v][2]=dist[v][1]; dp[v][2]=dp[v][1]; q.v=v,q.dist=dist[v][2],q.mark=2; Q.push(q); } dist[v][1]=p.dist+w; dp[v][1]=dp[p.v][p.mark]; q.dist=dist[v][1],q.v=v,q.mark=1; Q.push(q); }else if(!visited[v][1]&&p.dist+w==dist[v][1]){ dp[v][1]+=dp[p.v][p.mark]; }else if(!visited[v][2]&&p.dist+w<dist[v][2]){ dist[v][2]=p.dist+w; dp[v][2]=dp[p.v][p.mark]; q.v=v,q.dist=dist[v][2],q.mark=2; Q.push(q); }else if(!visited[v][2]&&p.dist+w==dist[v][2]){ dp[v][2]+=dp[p.v][p.mark]; } } } } int main(){ int _case; scanf("%d",&_case); while(_case--){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)vet[i].clear(); for(int i=1;i<=m;i++){ int u,v,w; scanf("%d%d%d",&u,&v,&w); Edge p; p.v=v,p.w=w; vet[u].push_back(p); } scanf("%d%d",&s,&e); Dijkstra(s,e); if(dist[e][1]+1==dist[e][2]){ printf("%d\n",dp[e][1]+dp[e][2]); }else printf("%d\n",dp[e][1]); } return 0; }
相关文章推荐
- hdu 3191+hdu 1688(最短路+次短路)
- HDU 3191 + HDU 1688(次短路)
- hdu 1688 Sightseeing (次短路及次短路数)&&pku3255 Roadblocks &&3191 How Many Paths Are There
- HDU 1688 Sightseeing 最短路 及次短路 路径长度和路径数
- HDU-3191 How Many Paths Are There 次最短路
- hdu 3191 次短路
- hdu 3191 How Many Paths Are There(次短路+条数)
- HDU_3191_How Many Paths Are There(次短路条数)
- HDU 3191 How Many Paths Are There 【次短路计数】
- hdu 3191 次短路+优先队列 如果让我说:我只能说,实力决定一切
- HDU-1688 Sightseeing 最短路与“次短路”条数
- HDU 1688 Sightseeing 【次短路条数】
- hdu 1688 / poj 3463 #最短路个数
- POJ 3463 && HDU 1688 Sightseeing 次短路
- poj 3463/hdu 1688 求次短路和最短路个数
- HDU 3191 次短路 How Many Paths Are There
- poj 3463/hdu 1688 求次短路和最短路个数
- hdu 1688 Sightseeing【最短路,次短路条数】
- HDU-3191 How Many Paths Are There(有向图次短路条数)
- HDU-1688 Sightseeing(最短路+次短路)