poj1062最短路
来源:互联网 发布:java中createNewfile 编辑:程序博客网 时间:2024/05/18 17:41
http://hi.baidu.com/aekdycoin/item/33b1f1e80efc8ce7fa42baa5
这个博客写的思路真的很好。
题目的本质是有限制条件的最短路,既最短路路径上的所有点的差的绝对值不能大于M
做法是
1.新增一个节点Vn,对于所有的物品,建边Vn->Vi(0<=i<n)
2.对于所有的附属物品,建边
Vj->Vi(j是i的附属物品)
3.枚举点
Vi(0<=i<n)
以Vi为等级最高点,假设其等级为Li,那么对于原图,在满足下面条件之一的时候做删点操作
a.某点的等级>Li
b.某点的等级<Li-M
之后做一次dijkstra,d[0]表示的就是Vn->V0的最短路,既最小花费 ,重复枚举,就可以得到最优解
同时这题给我许多启示:既可以通过多次DIJ+枚举的方法求解某些对于点之间关系有限制的问题!
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int oo=1e6;const int mm=121;int dist[mm],c[mm][mm],level[mm],temp[mm][mm];int n,m;void Dijkstra(int v){ bool s[mm*10]; for(int i=0;i<=n;i++) { dist[i]=temp[v][i]; s[i]=0; } dist[v]=0; s[v]=1; for(int i=1;i<=n;i++) { int tmp=oo; int u=v; for(int j=0;j<=n;j++) if((!s[j])&&dist[j]<tmp) tmp=dist[j],u=j; s[u]=1; for(int j=0;j<=n;j++) if((!s[j])&&temp[u][j]<oo) { int newdist=dist[u]+temp[u][j]; if(newdist<dist[j]) { dist[j]=newdist; } } }}int main(){ int i,j,x,t,v,a,k; while(~scanf("%d%d",&m,&n)) { for(i=0;i<=n;i++) for(j=0;j<=n;j++) c[i][j]=oo; for(i=0;i<n;i++) { scanf("%d%d%d",&a,&level[i],&x); c[n][i]=a; while(x--) { scanf("%d%d",&t,&v); c[t-1][i]=v; } } int ans=oo; for(i=0;i<n;i++) { for(j=0;j<=n;j++) for(k=0;k<=n;k++) temp[j][k]=c[j][k]; int tmp=level[i]; for(j=0;j<n;j++) if(level[j]>tmp||level[j]<tmp-m) { for(k=0;k<=n;k++) temp[j][k]=oo,temp[k][j]=oo; } Dijkstra(n); ans=min(ans,dist[0]); } printf("%d\n",ans); } return 0;}
- poj1062最短路
- poj1062(最短路问题)
- poj1062 最短路问题
- poj1062 最短路
- POJ1062->最短路Dij
- poj1062 Dijkstra 求最短路
- poj1062 Bellman 最短路应用
- poj1062 昂贵的聘礼 最短路
- poj1062 昂贵的葬礼 最短路 djikstra
- POJ1062 Expensive dowry 【最短路dijkstra】
- poj1062 昂贵的聘礼(最短路变形)
- poj1062 最短路(加限制)
- POJ1062 昂贵的聘礼(dijkstra最短路)
- POJ1062 昂贵的聘礼(最短路)
- poj1062 昂贵的聘礼 (最短路)
- poj1062——最短路Dijkstra
- poj1062 昂贵的聘礼 (最短路)
- poj1062昂贵的聘礼(题解)最短路
- 深入C#笔记(一)---Action
- MySQL中处理Null时要注意两大陷阱
- Android应用开发之(按需加载View)
- IE、FF、Safari、OP不同浏览器兼容报告
- Cla3D骨骼动画源代码所需环境配置
- poj1062最短路
- 构建自己的debian软件包仓库
- Protel与PADS之间相关文件的转换
- 骨骼动画反向动力学(IK)的实现
- Linux设备模型
- 深入理解DefaultMessageListenerContainer
- fedora16 cuda配置
- Android插件开发机制
- 斯坦纳树[全都floyd+状态dp]