POJ-1062 昂贵的聘礼(最短路)
2017-03-30 10:52
357 查看
POJ-1062
N个物品,每个物品的主人有等级,每个物品都有价格,某些物品也可以由一些物品替代,且等级差距小于M的两者不能直接和间接交易,一开始可以和任意人交易问怎么样选取可以让你的花费最少来购买到物品1
人和物品都看作节点,人到每个物品的权即购买价格,物品之间的边权即优惠价格,求最短路
N个物品,每个物品的主人有等级,每个物品都有价格,某些物品也可以由一些物品替代,且等级差距小于M的两者不能直接和间接交易,一开始可以和任意人交易问怎么样选取可以让你的花费最少来购买到物品1
人和物品都看作节点,人到每个物品的权即购买价格,物品之间的边权即优惠价格,求最短路
//人和物品都看作节点,人到每个物品的权即购买价格,物品之间的边权即优惠价格,WA1 一开始写对了,偷懒改了等级范围,忘记判大于等于l #include <cstdio> #include <algorithm> #include <queue> #include <cstring> using namespace std; typedef pair<int,int> PII; const int MAXN=222; const int MAXM=MAXN*MAXN/2; const int INF=0x3f3f3f3f; int head[MAXN],to[MAXM<<1],ne[MAXM<<1],wt[MAXM<<1],n,m,dist[MAXN],ecnt; int lev[MAXN]; void init() { ecnt=0; memset(head,0,sizeof(head)); } void addedge(int a,int b,int c) { ne[++ecnt]=head[a]; head[a]=ecnt; to[ecnt]=b; wt[ecnt]=c; } int vis[MAXN]; priority_queue<PII> pq; int dijkstra(int s,int t,int l)//s为源点,t为终点,路径权值非负 { for(int i=1;i<=n;i++) dist[i]=INF,vis[i]=0; dist[s]=0; pq.push(PII(0,s)); while(!pq.empty()) { int milb=pq.top().second; pq.pop(); if(vis[milb]) continue; vis[milb]=1; for(int j=head[milb];j;j=ne[j]) { int v=to[j]; if(((lev[v]<=m+l&&lev[v]>=l)||v==n)&&!vis[v]&&dist[v]>dist[milb]+wt[j]) { dist[v]=dist[milb]+wt[j]; pq.push(PII(-dist[v],v)); } } } return dist[t]; } vector<int> le; int main() { scanf("%d%d",&m,&n); int ta,tb,tc; n++; for(int i=1;i<n;i++) { scanf("%d%d%d",&ta,&tb,&tc); addedge(n,i,ta); lev[i]=tb; le.push_back(tb); for(int j=0;j<tc;j++) { scanf("%d%d",&ta,&tb); addedge(ta,i,tb); } } sort(le.begin(),le.end()); le.erase(unique(le.begin(),le.end()),le.end()); int ans=INF; for(int i=0;i<le.size();i++) ans=min(ans,dijkstra(n,1,le[i])); printf("%d\n",ans); return 0; }
相关文章推荐
- POJ 1062 昂贵的聘礼 (最短路)
- POJ 1062昂贵的聘礼 最短路dijkstra
- POJ1062 昂贵的聘礼(最短路)
- 昂贵的聘礼 POJ - 1062 (限制型最短路)
- poj 1062 昂贵的聘礼 (dijkstra最短路)
- POJ 1062 昂贵的聘礼 (dijkstra 最短路)
- POJ 题目1062 昂贵的聘礼(最短路,枚举)
- POJ - 1062 昂贵的聘礼 (最短路变形)
- POJ - 1062 昂贵的聘礼(最短路Dijkstra)
- POJ训练计划1062_昂贵的聘礼(最短路)
- 最短路(Dijkstra) POJ 1062 昂贵的聘礼
- poj1062昂贵的聘礼(题解)最短路
- poj1062 昂贵的聘礼(最短路变形)
- poj 1062 昂贵的聘礼 (最短路)
- POJ - 1062 昂贵的聘礼(最短路Dijkstra)
- POJ 1062 昂贵的聘礼 (最短路)
- (POJ 1062)昂贵的聘礼 在可选的顶点中求最短路 dijkstra + 枚举
- 【POJ1062】昂贵的聘礼 最短路 题目描述还有数据都坑爹
- 【日常学习】【条件最短路dij】POJ1062 昂贵的聘礼(2002年浙江省队选拔赛) 题解
- poj 1062 昂贵的聘礼 (有限制的最短路)