#include <cstdio>
#include <cstdlib>
#include <map>
#include <iostream>
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
const int maxn=1100;
const int inf=100000000;
int N,M,K,Ds;
bool vis[maxn]={false};
int d[maxn];
vector<int> pre[maxn];
struct node
{
int v;
int x;
node(int _v,int _x )
{
v=_v;
x=_x;
}
};
vector<node> G[maxn];
int change(string s)
{
int result=0;
bool st=false;
if(s[0]=='G')
{
st=true;
s.erase(s.begin()+0);
}
for(int i=0;i<s.length();i++)
{
result=result*10+s[i]-'0';
}
if(st)
{
result+=N;
}
return result;
}
struct sta
{
int i;
int dis;
bool ser;
int mini;
sta()
{
mini=inf;
ser=true;
dis=0;
}
}stat[12];
void initsta()
{
for(int i=0;i<12;i++)
stat[i].i=i;
}
bool cmp(sta a,sta b)
{
if(a.mini==b.mini&&a.dis==b.dis)return a.i<b.i;
else if(a.mini==b.mini)return a.dis<b.dis;
else return a.mini>b.mini;
}
int dis[12];
bool ser[12]={true};
int Mini[12]={inf};
void Dij(int st)
{
fill(d,d+maxn,inf);
fill(vis,vis+maxn,false);
d[st]=0;
for(int i=1;i<=N+M;i++)
{
int u=-1,MIN=inf;
for(int j=1;j<=N+M;j++)
{
if(vis[j]==false&&d[j]<MIN)
{
u=j;
MIN=d[j];
}
}
if(u==-1)return;
vis[u]=true;
if(u>=1&&u<=N)
{
int index=st-N;
stat[index].dis+=d[u];
if(d[u]>Ds)
{
stat[index].ser=false;
}
if(d[u]<stat[index].mini)
{
stat[index].mini=d[u];
}
}
for(int j=0;j<G[u].size();j++)
{
if(vis[G[u][j].v]==false)
{
if(d[u]+G[u][j].x<d[G[u][j].v])
{
d[G[u][j].v]=d[u]+G[u][j].x;
pre[G[u][j].v].clear();
pre[G[u][j].v].push_back(u);
}
else if(d[u]+G[u][j].x==d[G[u][j].v])
{
pre[G[u][j].v].push_back(u);
}
}
}
}
}
int main()
{
scanf("%d%d%d%d",&N,&M,&K,&Ds);
initsta();
for(int i=0;i<K;i++)
{
string s1,s2;
int c1,c2,v;
cin>>s1>>s2>>v;
c1=change(s1);
c2=change(s2);
G[c1].push_back(node(c2,v));
G[c2].push_back(node(c1,v));
}
for(int i=N+1;i<=N+M;i++)
{
Dij(i);
}
sort(stat+1,stat+M+1,cmp);
int it;
bool flag=false;
for(it=1;it<=M;it++)
{
if(stat[it].ser==true)
{
flag=true;
printf("G%d\n",stat[it].i);
double mini=stat[it].mini;
double ave=stat[it].dis*1.0/N;
printf("%.1f %.1f",mini,ave);
break;
}
}
if(!flag)
{
printf("No Solution\n");
}
system("pause");
return 0;
}
PAT甲1072. Gas Station (30)
猜你喜欢
转载自blog.csdn.net/yhy489275918/article/details/80246766
今日推荐
周排行