hdu 4318 SPFA 最短路
2013-05-12 03:06
375 查看
AC code:
#include<iostream> #include<stdio.h> #include<queue> #include<iomanip> #include<string> #include<cstring> using namespace std; #define N 50005 struct Edgenode { int v,next; double cost; }Edge[N*55]; int edgenumber,head ; int visited ; double Sum ; void SAFA(int s,int t,int total); void addedge(int i,int v1,double value) { Edge[edgenumber].v=v1; Edge[edgenumber].cost=value; Edge[edgenumber].next=head[i]; head[i]=edgenumber++; } int main() { int n,i,j,k,value,s,t,total; while(scanf("%d",&n)!=EOF) { memset(head,-1,sizeof(head)); edgenumber=0; for(i=1;i<=n;i++) { cin>>j; while(j--) { cin>>k>>value; addedge(i,k,value/100.00); } } cin>>s>>t>>total; for(int q=0;q<=n;++q) { visited[q]=0; Sum[q]=total;} SAFA(s,t,total); if(Sum[t]>=total) cout<<"IMPOSSIBLE!"<<endl; else printf("%.2lf\n",Sum[t]); } return 0; } void SAFA(int s,int t,int total) { queue<int> q; q.push(s); double temp; int i,j,k; Sum[s]=0; visited[s]=true; while(!q.empty()) { i=q.front(); q.pop(); for(j=head[i];j!=-1;j=Edge[j].next) { k=Edge[j].v; temp=Sum[i]+(total-Sum[i])*Edge[j].cost; if(Sum[k]<=temp) continue; Sum[k]=temp; if(visited[k]) continue; q.push(k); visited[k]=1; } visited[i]=0; } }
相关文章推荐
- hdu-4318(最短路)
- hdu 2544 最短路 spfa
- HDU 2544 最短路(四种写法:Floyd、Dijkstra、Bellman-Ford、SPFA)
- hdu 0 or 1(最短路spfa)(本质,抽象)
- HDU-#2544 最短路(Dijkstra、Floyd、Bellman-Ford、SPFA)
- HDU 2544 最短路 SPFA 邻接表 模板
- hdu:4360(spfa)求各种状态的最短路
- HDU 5294(Tricks Device-最短路最小割)[Template:SPFA]
- [HDU 1548] SPFA 最短路权值设为1, 然后求a--b的最短路
- hdu 1535 Invitation Cards 最短路spfa+逆向建图
- HDU-1142 最短路(spfa)
- HDU 2066 一个人的旅行【最短路 dijkstra & floyed & SPFA 】
- hdu 1839 Delay Constrained Maximum Capacity Path 二分下限+最短路spfa
- HDU 1142 A Walk Through the Forest(spfa最短路+dfs记忆化搜索)
- hdu 0 or 1(最短路spfa)(本质,抽象)
- Hdu 2544 最短路 (Dijkstra+SPFA+Floyd模板)
- HDU 2544 最短路【dijkstra+floyd+spfa+bellman-ford】
- hdu - 4318 - Power transmission - 最短路+贪心
- Spfa 最短路 HDU 2544
- HDU-3790 最短路 SPFA