POJ 1062 昂贵的聘礼(dij+邻接矩阵)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 1062 昂贵的聘礼(dij+邻接矩阵)相关的知识,希望对你有一定的参考价值。
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> using namespace std; const int INF=10e8; const int MAXN=110; int k,minn; int c[MAXN][MAXN],lc[MAXN],level[MAXN],X[MAXN]; bool vis[MAXN]; int dij(int n) { for(int i=1;i<=n;i++) lc[i]=c[0][i]; for(int j=1;j<=n;j++) { k=-1,minn=INF; for(int i=1;i<=n;i++) { if(!vis[i]&&lc[i]<minn) { minn=lc[i]; k=i; } } if(k==-1) break; vis[k]=1; for(int i=1;i<=n;i++) if(!vis[i]&&c[k][i]>0&&lc[i]>lc[k]+c[k][i]) //c[k][i]>0??2?ê?c[k][i]>=0 lc[i]=lc[k]+c[k][i]; } return lc[1]; } int main() { int m,n; scanf("%d%d",&m,&n); memset(c,0,sizeof(c)); memset(level,0,sizeof(level)); memset(lc,INF,sizeof(lc)); memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++) { scanf("%d%d%d",&c[0][i],&level[i],&X[i]); int t,v; for(int j=1;j<=X[i];j++) { scanf("%d%d",&t,&v); c[t][i]=v; } } int maxLevel,minPrice=INF; for(int i=1;i<=n;i++) { maxLevel=level[i]; for(int j=1;j<=n;j++) { if(level[j]>maxLevel||maxLevel-level[j]>m) vis[j]=1; else vis[j]=0; } int price=dij(n); minPrice=min(minPrice,price); } printf("%d\n",minPrice); return 0; }
以上是关于POJ 1062 昂贵的聘礼(dij+邻接矩阵)的主要内容,如果未能解决你的问题,请参考以下文章