(poj 1062 昂贵的聘礼)<最短路建模>
来源:互联网 发布:微分销java源码 编辑:程序博客网 时间:2024/06/06 13:05
传送门
如果虚拟一个源点s,题目就转化为求s到点1的最短路
把每个物品向s连一条边权为自己价格的边
同时如果拥有B可以使A优惠到C元,连边B到A,边权为C
他可以交易的人群的范围是国王的等级±m,枚举就好了
注意国王的等级不一定最高
这种国王的女儿你娶她干嘛?因为爱情(手动划掉)
Code
// by spli#include<cstring>#include<iostream>#include<algorithm>#include<cstdio>#include<queue>using namespace std;const int N=110;int m,n;struct node{ int to,nxt,val;}e[N*N*2];int head[N],cnt;int lev[N];int dis[N];bool vis[N];queue<int>q;int ans=0x3f3f3f3f;void add(int f,int t,int v){ cnt++; e[cnt]=(node){t,head[f],v}; head[f]=cnt;}void spfa(int d){ memset(dis,0x3f3f3f3f,sizeof(dis)); q.push(0);dis[0]=0;vis[0]=1; while(!q.empty()){ int u=q.front(); q.pop(); vis[u]=0; for(int i=head[u];i!=-1;i=e[i].nxt){ int v=e[i].to; if(lev[v]-m<=d&&lev[v]>=d&&dis[v]>dis[u]+e[i].val){ dis[v]=dis[u]+e[i].val; if(!vis[v]){ vis[v]=1; q.push(v); } } } } ans=min(ans,dis[1]);}int main(){ scanf("%d%d",&m,&n); memset(head,-1,sizeof(head)); int p,x,y,c; for(int i=1;i<=n;++i){ scanf("%d%d%d",&p,&lev[i],&x); add(0,i,p); for(int j=1;j<=x;++j){ scanf("%d%d",&y,&c); add(y,i,c); } } for(int i=lev[1];i>=lev[1]-m;--i) spfa(i); cout<<ans; return 0;}
阅读全文
0 0
- (poj 1062 昂贵的聘礼)<最短路建模>
- poj 1062 昂贵的聘礼(最短路)
- POJ 1062 昂贵的聘礼 最短路
- poj 1062昂贵的聘礼 最短路
- poj 1062 昂贵的聘礼(最短路)
- POJ 1062 昂贵的聘礼 最短路
- POJ 1062 昂贵的聘礼 最短路
- POJ 1062 昂贵的聘礼(限制的最短路)
- poj 1062(最短路——昂贵的聘礼)
- POJ 1062 昂贵的聘礼 (最短路 Dijkstra)
- POJ 1062昂贵的聘礼(dijk最短路)
- POJ 1062 - 昂贵的聘礼(最短路`dijkstra)
- POJ 1062 昂贵的聘礼 (dijkstra 最短路)
- poj 1062 最短路(昂贵的聘礼)
- POJ 题目1062 昂贵的聘礼(最短路,枚举)
- POJ - 1062 昂贵的聘礼 (最短路变形)
- poj 1062 昂贵的聘礼 (最短路)
- poj 1062 昂贵的聘礼 (dijkstra最短路)
- C/C++ | 25-16 实现子串定位int FindSubStr
- I2C总线协议的verilog实现
- 使用Tinker与极光推送实现Android热更新
- 【Java并发编程】活性
- Vertical line using XML drawable
- (poj 1062 昂贵的聘礼)<最短路建模>
- C/C++ | 26-17 已知一个单向链表的头,删除其某一个结点的算法
- Java基础面试题 (一)
- js基础提高(二)
- Spring注解方式进行事务管理
- LeetCode
- android selector.xml写法
- Android应用性能优化系列视图篇——恼人的分割线留白解决之道
- 实现在线看电子书