#include<bits/stdc++.h>
using namespace std;
const int INF=1000000000;
const int MAXN=1020;
int G[MAXN][MAXN];
int d[MAXN];
int n,m,k,ds;
bool vis[MAXN];
void dij(int v){
fill(d,d+MAXN,INF);
d[v]=0;
for(int j=1;j<=n+m;j++){
int k=-1;int MIN=INF;
for(int i=1;i<=n+m;i++){
if(vis[i]==false&&d[i]<MIN){
k=i;MIN=d[i];
}
}
if(k==-1) return;
vis[k]=true;
for(int i=1;i<=m+n;i++){
if(vis[i]==false&&G[k][i]!=INF){
if(d[k]+G[k][i]<d[i]){
d[i]=d[k]+G[k][i];
}
}
}
}
}
int getid(string a){
int ans=0;
if(a[0]=='G'){
a=a.substr(1,a.length());
for(int i=0;i<a.length();i++){
ans=ans*10+(a[i]-'0');
}
ans+=n;
}else{
for(int i=0;i<a.length();i++){
ans=ans*10+(a[i]-'0');
}
}
return ans;
}
int main()
{
//freopen("in.txt","r",stdin);
cin>>n>>m>>k>>ds;
fill(G[0],G[0]+MAXN*MAXN,INF);
for(int i=0;i<k;i++){
string p1,p2;int dis;
cin>>p1>>p2>>dis;
int t1,t2;
t1=getid(p1);
t2=getid(p2);
G[t1][t2]=dis;
G[t2][t1]=dis;
}
double optmin=-1;
double optans=INF;
string ppp;
for(int i=n+1;i<=n+m;i++){
fill(vis,vis+MAXN,false);
dij(i);
double ans=0;
double tempmin=INF;
int flag=0;
for(int j=1;j<=n;j++){
ans+=d[j];
if(d[j]<tempmin){
tempmin=d[j];
}
if(d[j]>ds){
flag=1;break;
}
}
if(flag==1){
continue;
}else{
ans/=(n*1.0);
if(tempmin>optmin){
ppp.clear();
optmin=tempmin;
optans=ans;
ppp="G"+to_string(i-n);
}else if(tempmin==optmin){
if(ans<optans){
ppp.clear();
optans=ans;
ppp="G"+to_string(i-n);
}
}
}
}
if(optans==INF||optmin==-1){
printf("No Solution");
return 0;
}
cout<<ppp<<endl;
printf("%.1lf %.1lf\n",optmin,optans);
return 0;
}
1072 Gas Station
猜你喜欢
转载自blog.csdn.net/csg3140100993/article/details/82219493
今日推荐
周排行