hdu 2363(最短路+枚举)
来源:互联网 发布:诺基亚lumia800软件 编辑:程序博客网 时间:2024/05/21 14:57
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2363
思路:和之前hdu上做过的一题很像。。。就是先求求出所有的高度差,排序后枚举,每次都一次spfa,求出dist,若dist[n]!=inf,说明是在最小高度差下找到了最短路径,直接break即可。。。另外,发现若不用visited[]标记的话,时间是其两倍。。。orz....以后还是老老实实加visited [] 吧。。。
View Code
1 #include<iostream> 2 #include<queue> 3 #include<vector> 4 #include<algorithm> 5 const int MAXN=110; 6 const int inf=1<<30; 7 using namespace std; 8 struct Node{ 9 int v,w;10 };11 vector<Node>mp[MAXN];12 struct Point{13 int low,high;14 }H[MAXN*MAXN];15 16 int h[MAXN];17 int dist[MAXN];18 bool visited[MAXN];19 int n,m;20 21 int cmp(const Point &p,const Point &q){22 return (p.high-p.low)<(q.high-q.low);23 }24 25 26 void SPFA(int low,int high){27 for(int i=1;i<=n;i++)dist[i]=inf;28 dist[1]=0;29 memset(visited,false,sizeof(visited));30 queue<int>Q;31 Q.push(1);32 while(!Q.empty()){33 int u=Q.front();34 Q.pop();35 visited[u]=false;//出队列要要置为false,因为有可能再次进队列36 if(h[u]<low||h[u]>high)continue;//起点要限制37 for(int i=0;i<mp[u].size();i++){38 int v=mp[u][i].v;39 int w=mp[u][i].w;40 //高度限制41 if(h[v]>=low&&h[v]<=high42 &&dist[u]+w<dist[v]){43 dist[v]=dist[u]+w;44 if(!visited[v]){45 Q.push(v);46 visited[v]=true;47 }48 }49 }50 }51 }52 53 int main(){54 int _case;55 scanf("%d",&_case);56 while(_case--){57 scanf("%d%d",&n,&m);58 for(int i=1;i<=n;i++)mp[i].clear();59 memset(H,0,sizeof(H));60 memset(h,0,sizeof(h));61 for(int i=1;i<=n;i++){62 scanf("%d",&h[i]);63 }64 for(int i=1;i<=m;i++){65 int u,v,w;66 scanf("%d%d%d",&u,&v,&w);67 Node p1,p2;68 p1.v=u,p2.v=v;69 p1.w=p2.w=w;70 mp[u].push_back(p2);71 mp[v].push_back(p1);72 }73 int k=0;74 for(int i=1;i<=n;i++){75 for(int j=i;j<=n;j++){76 H[k].low=min(h[i],h[j]);77 H[k++].high=max(h[i],h[j]);78 }79 }80 sort(H,H+k,cmp);81 int i=0;82 while(i<k){83 SPFA(H[i].low,H[i].high);84 if(dist[n]!=inf){85 break;86 }87 i++;88 }89 printf("%d %d\n",H[i].high-H[i].low,dist[n]);90 }91 return 0;92 }
0 0
- HDU 2363 Cycling(枚举+最短路)
- hdu 2363(最短路+枚举)
- hdu 2363(限制最短路 二分+枚举+最短路)
- hdu 2363 Cycling (最短路spfa + 暴力枚举)
- HDU 2363 Cycling 最短路+枚举
- HDU 2363 Cycling 枚举限制+最短路
- hdu 3986(最短路+枚举)
- hdu 3986 (枚举+最短路)
- HDU 3986 最短路+枚举
- HDU 2363 Cycling(二分+枚举+限制最短路,好题)
- HDU 1595 枚举+最短路(删掉边)
- HDU 2433 Travel 枚举+最短路
- HDU-1595&3986-枚举+最短路
- Hdu 3986 【枚举】【最短路】 解题报告
- HDU 2544 最短路 (单源最短路)
- hdu1595(枚举+最短路,Dijkstra/SPFA)
- UVA11374-Airport Express(最短路+枚举)
- hdu3986枚举+最短路
- 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(并查集+欧拉路判断)
- IOS 画图总结
- hdu 1181(并查集+拓扑排序)