PAT 1072 Gas Station SPFA
2014-08-25 11:48
363 查看
//妈蛋,当时有个下标写错了...
#include<algorithm> #include<cstdio> #include<iostream> #include<string> #include<cstring> #include<vector> #include<set> #include<map> #include<queue> #define ll long long using namespace std; int n,m,k,d; int g[1100][1100],in[1100],dis[1100]; int get(char *s) { if(s[0]!='G')return atoi(s); if(strlen(s) == 3)return n+10; else return n+s[1]-'0'; } void spfa(int bg) { queue<int>q; memset(in,0,sizeof(in)); memset(dis,0x7f,sizeof(dis)); in[bg] = 1; dis[bg] = 0; q.push(bg); while(!q.empty()) { int u = q.front(); q.pop(); in[u] = 0; for(int i = 1;i<=n+m;i++) { if(g[u][i] == -1)continue; if(dis[i]>dis[u]+g[u][i]) { dis[i] = dis[u]+g[u][i]; if(!in[i]) { q.push(i); in[i] = 1; } } } } } int main() { char s1[10],s2[10]; int i,j,x,y,z; while(scanf("%d%d%d%d",&n,&m,&k,&d)!=EOF) { memset(g,-1,sizeof(g)); for(i = 0;i<k;i++) { scanf("%s%s%d",s1,s2,&x); g[get(s1)][get(s2)] = g[get(s2)][get(s1)] = x; } int mx = -1,sum = 1e9,ans = -1; for(i = n+1;i<=n+m;i++) { int mn = 1e9,total = 0,f = 1; spfa(i); for(j = 1;j<=n;j++) { if(dis[j]>d) { f = 0; break; } mn = min(mn,dis[j]); total+=dis[j]; } if(!f)continue; if(mn>mx||(mn==mx&&total<sum)) { mx = mn; sum = total; ans = i; } } if(ans == -1)printf("No Solution\n"); else printf("G%d\n%.1lf %.1lf\n",ans-n,(double)mx,(double)sum/(double)n); } return 0; }
相关文章推荐
- PAT 1072 Gas Station
- 【PAT】1072. Gas Station (30)
- 【PAT】【Advanced Level】1072. Gas Station (30)
- 浙大PAT 1072题 1072. Gas Station
- PAT (Advanced Level) 1072. Gas Station (30) Dijkstra最短路径+剪枝
- Pat(Advanced Level)Practice--1072(Gas Station)
- 1072. Gas Station PAT Dijkstra算法
- PAT 1072. Gas Station (30)(多个点的最短路径)
- 1072. Gas Station (30)【最短路dijkstra】——PAT (Advanced Level) Practise
- PAT-A-1072. Gas Station (30)
- PAT (Advanced Level) 1072. Gas Station (30)
- PAT (Advanced) 1072. Gas Station (30)
- PAT 1072. Gas Station (30)
- PAT 1072. Gas Station (dijkstra)
- PAT_1072. Gas Station(Dijkstra最短路)
- PAT_1072 Gas Station
- Pat(A) 1072. Gas Station (30)
- PAT 1072. Gas Station (30)
- PAT - 甲级 - 1072. Gas Station (30)(Dijkstra)
- PAT 1072. Gas Station (30)