POJ 1062昂贵的聘礼 (建图+dijkstra)
2013-08-08 17:54
393 查看
题目地址: http://poj.org/problem?id=1062
开始用DFS写 , 莫名其妙的MLE,明明没有超,就这样纠结, 而且咩有纠结出来。。。一定要弄出来(DFS MLE代码http://paste.ubuntu.com/5961195/)
之后用最短路写, 主要是处理 等级的限制。 用到枚举 ,枚举以酋长的地位为其中的值,以m为范围,求出每次可以可能 到达的等级 记录为within[],松弛要做出些微的改变
之后分别dijkstra, 求出最小的
开始还是WA了几次, 因为 忘了预处理 也要 考虑 within[] 之后就A掉了, 一直很纠结于DFS写法 。。
这题 做的时间很长, 要快一点了!!
开始用DFS写 , 莫名其妙的MLE,明明没有超,就这样纠结, 而且咩有纠结出来。。。一定要弄出来(DFS MLE代码http://paste.ubuntu.com/5961195/)
之后用最短路写, 主要是处理 等级的限制。 用到枚举 ,枚举以酋长的地位为其中的值,以m为范围,求出每次可以可能 到达的等级 记录为within[],松弛要做出些微的改变
之后分别dijkstra, 求出最小的
开始还是WA了几次, 因为 忘了预处理 也要 考虑 within[] 之后就A掉了, 一直很纠结于DFS写法 。。
这题 做的时间很长, 要快一点了!!
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #define INT_MAX 0x3f3f3f3f #define max(a,b) (a)>(b)? (a):(b) #define min(a,b) (a)>(b)? (b):(a) int m,n; struct node { int p,l,x; }nu[105]; int map[105][105]; int used[105]; int within[105]; int dis[105]; int dijk(int v) { int i,j,k; /* for(i=0;i<=n;i++) { if(within[i]) dis[i]=map[v][i]; else dis[i]=INT_MAX; used[i]=0; } used[v]=1; dis[v]=0;*/ for(i=0;i<=n;i++) dis[i]=INT_MAX; memset(used,0,sizeof(used)); dis[v]=0; for(i=1;i<=n-1;i++) { int mi=INT_MAX; int arr=v; for(j=1;j<=n;j++) { if(!used[j] && within[j]&& mi>dis[j])// { mi=dis[j]; arr=j; } } used[arr]=1; for(k=1;k<=n;k++) { if( !used[k] &&within[k] && dis[arr]+map[arr][k]<dis[k])// { dis[k]=dis[arr]+map[arr][k]; } } } int mii=INT_MAX; for(i=1;i<=n;i++) { dis[i]+=nu[i].p; if(dis[i]<mii) mii=dis[i]; } return mii; } int main() { //freopen("in.txt","r",stdin); int i,j,k; while(scanf("%d%d",&m,&n)!=EOF) { for(i=0;i<=n;i++) { for(j=0;j<=n;j++) { map[i][j]=INT_MAX; if(i==j) map[i][j]=0; } } for(i=1;i<=n;i++) { scanf("%d%d%d",&nu[i].p,&nu[i].l,&nu[i].x); for(j=1;j<=nu[i].x;j++) { int a,b; scanf("%d%d",&a,&b); map[i][a]=b; } } //within int x,y; int ans=INT_MAX; for(x=nu[1].l-m;x<=nu[1].l;x++) { y=x+m; memset(within,0,sizeof(within)); for(i=1;i<=n;i++) { if(nu[i].l>=x && nu[i].l<=y) { within[i]=1; } } int mm=dijk(1); ans=min(ans,mm); } printf("%d\n",ans); } return 0; }
相关文章推荐
- POJ 1062-昂贵的聘礼(最短路_dijkstra)
- 昂贵的聘礼 POJ - 1062 单源最短路 Dijkstra
- POJ 1062 昂贵的聘礼(最短路Dijkstra)
- POJ 1062 昂贵的聘礼(最短路径.Dijkstra)
- poj 1062(nyoj 510) 昂贵的聘礼(dijkstra)
- POJ 1062 昂贵的聘礼(dijkstra)
- POJ_1062_昂贵的聘礼【Dijkstra】
- POJ - 1062 昂贵的聘礼 Dijkstra
- POJ 1062 昂贵的聘礼 (最短路 Dijkstra)
- 昂贵的聘礼 poj 1062 Dijkstra
- POJ_1062 昂贵的聘礼 Dijkstra
- POJ 1062 昂贵的聘礼 (dijkstra+枚举)
- POJ 1062 昂贵的聘礼【dijkstra】
- POJ1062——Dijkstra——昂贵的聘礼
- 昂贵的聘礼 poj 1062 Dijkstra
- 昂贵的聘礼 POJ - 1062 Dijkstra + 枚举
- POJ 1062 昂贵的聘礼(Dijkstra)
- poj 1062 昂贵的聘礼 枚举等级dijkstra
- POJ 1062 昂贵的聘礼【dijkstra】
- POJ1062昂贵的聘礼(dijkstra)