1072. Gas Station (30)
来源:互联网 发布:软件集成测试 编辑:程序博客网 时间:2024/05/20 05:29
#include<algorithm>#include<cstdio>#include<cstring>using namespace std;#define maxn 1020#define INF 1000000000int n,m,k,ds,n_all=0;int G[maxn][maxn],vis[maxn]={false},d[maxn];int all_dis=0,min_dis=INF,flag=0,all_flag=0,ans_sta=INF,ans_min=0;double dis_avg=0,ans_avg=INF;int changetonum(char str[]){ int x=0,len = strlen(str); if(str[0] == 'G') { for(int j=1; j<len; j++) x = x*10 + (str[j] - '0'); x += n; } else { for(int j=0; j<len; j++) x = x*10 + (str[j] - '0'); } return x;}void dijstra(int s){ //初始化 d[s] = 0; //n次循环,1开始,nall结束 for(int i=1; i<=n_all; i++) { //找距离最小的 int u = -1,MIN = INF; for(int j=1; j<=n_all; j++) { if(vis[j] == false && d[j]<MIN) { u = j; MIN = d[j]; } } if(u == -1) return; vis[u] = true; //更新最短距离 for(int v=1; v<=n_all; v++) { if(vis[v]==false && G[u][v] != INF && (d[u]+G[u][v])<d[v]) { d[v] = d[u] + G[u][v]; } } }}int main(){ //输入数据 fill(G[0],G[0]+maxn*maxn,INF); scanf("%d%d%d%d",&n,&m,&k,&ds); n_all = n+m; //构造图 for(int j=0; j<k; j++) { char str1[6],str2[6]; int a,b,v; scanf("%s%s %d",str1,str2,&v); a = changetonum(str1); b = changetonum(str2); G[a][b] = G[b][a] = v; } //循环遍历图,找到最优解 for(int i=n+1; i<=n+m; i++) { //初始化 fill(d, d+maxn, INF); fill(vis, vis+maxn, false); flag = 0; min_dis = INF; all_dis = 0; dijstra(i); for(int x=1; x<=n; x++) { //是否超过服务范围 if(d[x]>ds) { all_flag +=1; //flag加1,如果为m,则所有都不符合! flag = 1; break; } if(d[x]<min_dis) { min_dis = d[x]; } all_dis += d[x]; } dis_avg = all_dis*1.0/n; //在服务范围内 if(flag == 0) { //找到了最安全的距离 if(min_dis > ans_min) { //全部更新 ans_min = min_dis; ans_avg = dis_avg; ans_sta = i; } else if(min_dis == ans_min) { //找平均距离最小的 if(dis_avg < ans_avg) { ans_avg = dis_avg; ans_sta = i; } else if(dis_avg == ans_avg) { //找节点小的 if(i < ans_sta) ans_sta = i; } } } } //输出最优解 if(all_flag == m) { printf("No Solution"); } else { printf("G%d\n",ans_sta-n); printf("%d.0 %.1f",ans_min,ans_avg); } return 0;}
0 0
- 1072. Gas Station (30)
- 1072. Gas Station (30)
- 1072. Gas Station (30)
- 1072. Gas Station (30)
- 1072. Gas Station (30)
- 1072. Gas Station (30)
- 1072. Gas Station (30)
- 1072. Gas Station (30)
- 1072. Gas Station (30)
- 1072. Gas Station (30)
- 1072. Gas Station (30)
- 1072. Gas Station (30)
- 1072. Gas Station (30)
- 1072. Gas Station (30)
- 1072. Gas Station (30)
- 1072. Gas Station (30)
- 1072.Gas Station (30)
- 1072. Gas Station (30)
- SQLite教程(内置日期和时间函数)
- 数据库基础
- android中关于观察者模式的demo
- localstorage本地储存的存取
- |hdu 3440|差分约束|House Man
- 1072. Gas Station (30)
- MFC对话框窗口&Tab Control控件
- IFE-2017-CSS-官网布局
- notification(通知)的使用
- 我的推免经历
- GBDT和Xgboost模型对比总结
- 10.1 分别通过函数和重载运算符来实现复数相加
- PTA.5-1 复数相加
- 在每行、每列递增的二维数组中找出给定的target 的位置