hdu 2145(最短路+排序)
来源:互联网 发布:诺基亚lumia800软件 编辑:程序博客网 时间:2024/06/06 18:13
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2145
思路:题目很简单。。。关键是思想,如果你建图求的是每个点到终点的最短距离,那就TLE了,但仔细一想,我也可以建反向图啊!!!然后一次Dijkstra或者spfa就可以了。。。
最后排序即可。
View Code
1 #include<iostream> 2 #include<queue> 3 #include<vector> 4 #include<algorithm> 5 const int MAXN=333; 6 const int inf=1<<30; 7 using namespace std; 8 struct Person{ 9 int num,dist;10 double time;11 }person[MAXN];12 13 struct Node{14 int v,w;15 };16 vector<Node>mp[MAXN];17 int n,m,k,p;18 int dist[MAXN];19 int Pos[MAXN],Speed[MAXN];20 21 int cmp(const void *a,const void *b){22 Person *p=(Person *)a;23 Person *q=(Person *)b;24 if(p->time!=q->time){25 return p->time>q->time?1:-1;26 }else if(p->dist!=q->dist){27 return q->dist-p->dist;28 }else 29 return q->num-p->num;30 }31 32 33 34 void SPFA(int u){35 for(int i=1;i<=n;i++)dist[i]=inf;36 dist[p]=0;37 queue<int>Q;38 Q.push(u);39 while(!Q.empty()){40 int u=Q.front();41 Q.pop();42 for(int i=0;i<mp[u].size();i++){43 int v=mp[u][i].v;44 int w=mp[u][i].w;45 if(dist[u]+w<dist[v]){46 dist[v]=dist[u]+w;47 Q.push(v);48 }49 }50 }51 }52 53 54 55 int main(){56 while(~scanf("%d%d%d",&n,&m,&k)){57 for(int i=1;i<=n;i++)mp[i].clear();58 memset(person,0,sizeof(person));59 memset(Pos,0,sizeof(Pos));60 memset(Speed,0,sizeof(Speed));61 for(int i=1;i<=k;i++){62 int u,v,w;63 scanf("%d%d%d",&u,&v,&w);64 Node p;65 p.v=u,p.w=w;//建反向图66 mp[v].push_back(p);67 }68 scanf("%d",&p);69 for(int i=1;i<=m;i++){70 scanf("%d",&Pos[i]);71 }72 for(int i=1;i<=m;i++){73 scanf("%d",&Speed[i]);74 }75 SPFA(p);76 int l=0;77 for(int i=1;i<=m;i++){78 if(dist[Pos[i]]<inf){79 person[l].num=i;80 person[l].dist=dist[Pos[i]];81 person[l++].time=dist[Pos[i]]*1.0/Speed[i];82 }83 }84 if(l==0){85 printf("No one\n");86 }else {87 qsort(person,l,sizeof(person[0]),cmp);88 printf("%d\n",person[0].num);89 }90 }91 return 0;92 }
0 0
- hdu 2145(最短路+排序)
- hdu 2145(最短路+排序)
- hdu 2145 最短路
- HDU 4109 拓扑排序(最短路思想)关键路径
- HDU 2544 最短路 (单源最短路)
- hdu 1874 (最短路)
- hdu 3499 (最短路)
- hdu 2851(最短路)
- hdu 1548(最短路)
- hdu 3832(最短路)
- 最短路 (HDU 2544)
- HDU--2851(最短路)
- hdu 2544(最短路)
- hdu 1233(最短路)
- hdu 1546(最短路)
- hdu 3790(最短路)
- 最短路习题集(hdu)
- (HDU-2544)最短路
- hdu 1250
- hdu 1286( 欧拉函数 )
- hdu 1245(最短路+bfs)
- hdu 1317+hdu 1535(SPFA)
- hdu 1839(二分+最短路)
- hdu 2145(最短路+排序)
- 第14周-项目一-动物这样叫
- hdu 2363(最短路+枚举)
- hdu 2377
- hdu 2962(最短路+二分)
- hdu 3191+hdu 1688(最短路+次短路)
- hdu 3986(最短路+枚举)
- linux性能分析 sar 命令详解
- hdu 1116(并查集+欧拉路判断)