poj 1062 昂贵的聘礼 枚举等级dijkstra
2015-04-21 20:33
316 查看
#include<iostream>//看到图题目之后觉得题很动态,可以试试枚举 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int inf=0x7ffffff; int map[105][105]; int vis[105]; int dis[105],dengji[105]; int N,M; void dijstra(int m,int n) { memset(dis,0x3f,sizeof(dis)); memset(vis,0,sizeof(vis)); for(int i=0;i<=N;i++) { map[i][i]=0; } vis[0]=1; for(int i=0;i<=N;i++) { if(dengji[i]>=m&&dengji[i]<=n) { dis[i]=map[0][i]; } } for(int i=0;i<=N;i++) { int minn=inf,wei=0;//cout<<"ha"; for(int j=0;j<=N;j++) { if(!vis[j]&&dis[j]<minn){//zhaozuiduande minn=dis[j]; wei=j; } } if(minn==inf) break;//如果已经遍历完了直接退出 vis[wei]=1; for(int j=0;j<=N;j++) { if(dis[j]>dis[wei]+map[wei][j]&&dengji[j]>=m&&dengji[j]<=n) dis[j]=dis[wei]+map[wei][j]; } } } int n,m; int main() { memset(map,0x3f,sizeof(map)); cin>>M>>N; int ans=999999999; for(int i=1;i<=N;i++) { int k; scanf("%d%d%d",&map[0][i],&dengji[i],&k);//让探险家一开始在0,0的位置; for(int j=1;j<=k;j++) { int t,p; scanf("%d%d",&t,&p); map[t][i]=p; } } //cout<<"haha"; for(int i=dengji[1]-M;i<=dengji[1];i++)//需要枚举所有开始的等级 { dijstra(i,i+M); if(ans>dis[1]) ans=dis[1]; } cout<<ans<<endl; return 0; }
相关文章推荐
- poj1062 昂贵的聘礼(Dijkstra+枚举等级处理)
- [POJ1062] 昂贵的聘礼 枚举等级 + dijkstra
- POJ 1062(昂贵的聘礼 枚举 + Dijkstra)
- [POJ 1062] 昂贵的聘礼 [最短路+枚举] [dijkstra]
- 昂贵的聘礼 POJ - 1062 Dijkstra + 枚举
- (POJ 1062)昂贵的聘礼 在可选的顶点中求最短路 dijkstra + 枚举
- POJ 1062 昂贵的聘礼 (dijkstra+枚举)
- POJ1062 昂贵的聘礼 ACM解题报告(dijkstra+枚举)
- POJ1062 昂贵的聘礼 Dijkstra+枚举
- POJ 1062 昂贵的聘礼(最短路径Dijkstra+枚举)
- POJ1062 昂贵的聘礼(dijkstra+等级约束时候松弛的判断)
- poj 1062 昂贵的聘礼 【枚举 + dijkstra】
- POJ 1062 昂贵的聘礼 最短路枚举等级限制
- 昂贵的聘礼 - poj 1062 (Dijkstra+枚举)
- poj1062 昂贵的聘礼 dijkstra
- POJ1062 昂贵的聘礼(单源最短路径+枚举)
- POJ 1062 昂贵的聘礼 (dijkstra)
- POJ 1062 昂贵的聘礼(dijkstra)
- poj 1062 昂贵的聘礼 【最短路径-Dijkstra】
- poj1062——昂贵的聘礼(dijkstra变形)