POJ-1062-昂贵的聘礼
2013-07-31 18:37
316 查看
最开始一直没想到关于等级怎么处理,后来参考了下别人的博客才知道枚举等级差值的方法~受教了!
地址:http://cavenkaka.iteye.com/blog/1189266
代码:
地址:http://cavenkaka.iteye.com/blog/1189266
代码:
#include<cstdio> #include<cstring> #include<iostream> using namespace std; const int maxn=110; const int inf=1<<29; int n,m,level[maxn],map[maxn][maxn],dist[maxn]; bool vis[maxn]; int Dijstra(int st) { for(int i=1;i<=n;i++) dist[i]=map[0][i]; for(int i=0;i<n;i++) { int mini=inf,pos=-1; for(int j=1;j<=n;j++) if(!vis[j]&&dist[j]<mini) { mini=dist[j]; pos=j; } if(pos==-1) break; vis[pos]=1; for(int j=1;j<=n;j++) if(!vis[j]&&dist[j]>dist[pos]+map[pos][j]) dist[j]=dist[pos]+map[pos][j]; } return dist[1]; } int main() { while(scanf("%d%d",&m,&n)!=EOF) { memset(level,0,sizeof(level)); memset(map,0x7f,sizeof(map)); for(int i=1;i<=n;i++) { int k; map[i][i]=0; scanf("%d%d%d",&map[0][i],&level[i],&k); while(k--) { int v,c; scanf("%d%d",&v,&c); map[v][i]=c; } } int ans=inf; for(int i=0;i<=m;i++) { memset(vis,0,sizeof(vis)); for(int j=1;j<=n;j++) if(level[j]<level[1]-i||level[j]>level[1]+m-i) vis[j]=1; ans=min(ans,Dijstra(0)); } printf("%d\n",ans); } return 0; }
相关文章推荐
- POJ-1062 昂贵的聘礼 区间枚举
- poj1062 昂贵的聘礼 Dijkstra
- POJ -1062 昂贵的聘礼(前向星 && SPFA)
- poj 1062 昂贵的聘礼
- 【原】 POJ 1062 昂贵的聘礼 Dijkstra 解题报告
- POJ 1062-昂贵的聘礼(最短路-预处理限制点)
- POJ 1062 昂贵的聘礼 Dijkstra
- POJ - 1062昂贵的聘礼最短路或者DFS
- POJ1062,昂贵的聘礼,中文题,Dijkstral
- poj 1062昂贵的聘礼
- 初级->图算法->最短路径 poj 1062 昂贵的聘礼
- poj 1062昂贵的聘礼 最短路
- POJ 1062 昂贵的聘礼 (最短路 Dijkstra)
- POJ 1062 昂贵的聘礼【dijkstra】
- POJ 1062 昂贵的聘礼 (最短路径)
- POJ_1062 昂贵的聘礼【DFS】
- POJ 1062 昂贵的聘礼(最短路)
- POJ 1062 昂贵的聘礼 (dijkstra)
- poj 1062 昂贵的聘礼(最短路 dijk+枚举)
- poj 1062 昂贵的聘礼