POJ_1062 昂贵的聘礼【DFS】
来源:互联网 发布:冯绍峰双龙出洞 知乎 编辑:程序博客网 时间:2024/06/04 18:41
题意:
一件物品本事有一个价值,他可以用另一件物品加上某个价值进行兑换。问得到物品1需要花费最少的价值是多少。
注意是任意两个人等级之差都不能超过m
思路:
此题神坑...酋长的等级不一定是最高的,而且还可能有内环,要注意标记
注意要判断路径内最小等级与最大等级之差,不能只判断一个
ans=min(ans,price+G[t].p);是在每次递归都需要进行运算的,而不是在递归结束条件里进行。因为可能在兑换过程中ans会达到最小值。
代码部分:
#include<bits/stdc++.h> //c++万能头文件using namespace std;struct good{ int p; int le; int n; int a[105]; map<int,int>M;};int vis[105]; int M; int ans; int Min,Max;void dfs(good G[],int t,int price){ ans=min(ans,price+G[t].p); if(G[t].n==0)return; for(int i=1; i<=G[t].n; i++) { int pric=price; if(abs(G[G[t].a[i]].le-Max)<=M&&abs(G[G[t].a[i]].le-Min)<=M&&vis[G[t].a[i]]==0) { int temp=G[t].M[G[t].a[i]]; pric+=temp; if(pric>ans) continue; if(G[G[t].a[i]].le>Max) Max=G[G[t].a[i]].le; if(G[G[t].a[i]].le<Min) Min=G[G[t].a[i]].le; vis[G[t].a[i]]=1; dfs(G,G[t].a[i],pric); vis[G[t].a[i]]=0; } }}int main(){ int N; while(~scanf("%d%d",&M,&N)) { memset(vis,0,sizeof(vis)); good G[105]; for(int i=1; i<=N; i++) { int pr,l,nu;int num,pri; scanf("%d%d%d",&pr,&l,&nu); G[i].p=pr;G[i].le=l;G[i].n=nu; for(int j=1; j<=nu; j++) { scanf("%d%d",&num,&pri); G[i].a[j]=num; G[i].M[num]=pri; } } ans=G[1].p;Min=G[1].le;Max=G[1].le;vis[1]=1; dfs(G,1,0); printf("%d\n",ans); } return 0;}
3 0
- POJ_1062 昂贵的聘礼【DFS】
- poj_1062 昂贵的聘礼(SPFA)
- POJ_1062 昂贵的聘礼 Dijkstra
- POJ1062--昂贵的聘礼--DFS
- 昂贵的聘礼(dfs)
- POJ1062 昂贵的聘礼 【DFS】
- poj1062 昂贵的聘礼 (DFS)
- 昂贵的聘礼 (dfs)
- poj 1062 昂贵的聘礼(DFS)
- NYOJ 510 昂贵的聘礼 dfs
- 昂贵的聘礼 [DFS][最短路]
- poj 1062 昂贵的聘礼 dfs
- 昂贵的聘礼,很昂贵
- poj 1062 昂贵的聘礼 DFS算法应用
- POJ - 1062昂贵的聘礼最短路或者DFS
- PKU1062 昂贵的聘礼
- pku1061 昂贵的聘礼
- 昂贵的聘礼
- Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04
- 关于CSDN博客插入的代码中出现html标记问题的解决方法
- 格式化json数据
- c++中vector的用法详解
- Spring Boot Dubbo 整合和入门理解
- POJ_1062 昂贵的聘礼【DFS】
- Android中TextView的滑动(横向/纵向)
- 基于STM32和ESP8266的低成本物联网控制盒子
- 793D Presents in Bankopolis
- 概率统计的奇妙结论
- HTTP详解
- FL Studio音频剪辑和剪辑菜单详讲
- 关于空指针的一点坑
- Invitation Cards poj1511(优先队列+邻接表+dijk)