hdu2145

来源:互联网 发布:剑三纯阳捏脸数据女 编辑:程序博客网 时间:2024/06/08 05:47
/*题意:n个城市,k个人,m条路,然后给定一个重点,然后给出k个人的起点,然后给出k个人走路的速度,要你求最快速到达的那个人的编号,如果速度相同则输出距离远的如果距离相同则输出编号大的;是有向边;思路:跟之前做过那个派人去守仓库的那个题也是一样的有向边,求派人去仓库的最短路,求那些人回来的最短路,这里也是一样,就是求其他人来起点的最短路,然后在计算得出最短的即可。*/#include<stdio.h>#include<stdlib.h>#include<string.h>#include<queue>#include<vector>using namespace std;#define INF 1e9struct edge{    int from,to,w;};int dis[350];vector<edge>edges;vector<int>G[350];int renqi[350];int rensudu[350];double renshijian[350];int n,k,m;int zx;int map[350][350];int select[350];void addedge(int x,int y,int w){    edge a={x,y,w};    edges.push_back(a);    G[x].push_back(edges.size()-1);}void dij(){    for(int i=1;i<=n;i++)    {        dis[i]=INF;    }  dis[zx]=0;  queue<int>q;  q.push(zx);  int a;  while(!q.empty())  {      a=q.front();      q.pop();      for(int i=0;i<G[a].size();i++)      {          edge v=edges[G[a][i]];          if(dis[a]+v.w<dis[v.to])          {              dis[v.to]=dis[a]+v.w;              q.push(v.to);          }      }  }}void init(){    for(int i=1;i<=n;i++)      {         G[i].clear();      }      edges.clear();      for(int i=1;i<=m;i++)      {          int x,y,w;          scanf("%d %d %d",&x,&y,&w);          addedge(y,x,w);      }      scanf("%d",&zx);       dij();      for(int i=1; i<=k;i++)      {          scanf("%d",&renqi[i]);      }       for(int i=1;i<=k;i++)      {          scanf("%d",&rensudu[i]);      }}int main(){  while(scanf("%d %d %d",&n,&k,&m)!=EOF)  {  init();     double max1=INF;     int u=-1,juli;     for(int i=1;i<=k;i++)     if(dis[renqi[i]]<INF)      {          renshijian[i]=((double)dis[renqi[i]])/rensudu[i];         if(max1>renshijian[i])          {              max1=renshijian[i];              juli=dis[renqi[i]];              u=i;          }          else if(max1==renshijian[i])          {                if(juli<=dis[renqi[i]])                {                   u=i;                   juli=dis[renqi[i]];               }          }      }    if(u!=-1) printf("%d\n",u);    else printf("No one\n");}  return 0;}