poj 1602 昂贵的聘礼
来源:互联网 发布:南京市软件行业协会 编辑:程序博客网 时间:2024/05/01 00:01
题目传送门
//此题的关键在于等级限制的处理,最好的办法是采用枚举,即假设酋长等级为5,等级限制为2,那么需要枚举等级从3~5,4~6,5~7//然后就是dij了,至于为什么要用dij,看个人喜好,毕竟这里等级处理要对vis数组进行标记//处理了等级问题,就可以枚举等级数组,n倍dij跑完本题了,nlogn0ms搞定//以下为具体代码#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;#define inf 0x3fffffffint maze[110][110];int dis[110],degree[110],val[110],vis[110];int m,n;void init(){ memset(dis,inf,sizeof(dis)); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) maze[i][j]=inf;}int dij(){ for(int i=1;i<=n;i++) dis[i]=val[i]; for(int i=1;i<=n;i++) { int minn=inf,mark=inf; for(int j=1;j<=n;j++) { if(!vis[j]&&dis[j]<minn) { minn=dis[j]; mark=j; } } if(minn==inf)break; vis[mark]=true; for(int j=1;j<=n;j++) { if(!vis[j]&&dis[j]>dis[mark]+maze[mark][j]) { dis[j]=dis[mark]+maze[mark][j]; } } } return dis[1];}int main(){ while(~scanf("%d%d",&m,&n)) { init(); int x,a,b,tmp; int ans=inf; for(int i=1;i<=n;i++) { scanf("%d%d%d",&val[i],°ree[i],&x); while(x--) { scanf("%d%d",&a,&b); maze[a][i]=b; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(degree[j]>=degree[i]&°ree[j]<=degree[i]+m) { vis[j]=false; } else { vis[j]=true; } } tmp=dij(); ans=min(ans,tmp); } cout<<ans<<endl; } return 0;}
0 0
- poj 1602 昂贵的聘礼
- POJ-1602 昂贵的聘礼
- 昂贵的聘礼 POJ
- 昂贵的聘礼 POJ
- 昂贵的聘礼 POJ
- 昂贵的聘礼 POJ
- 昂贵的聘礼 POJ
- 昂贵的聘礼 POJ
- 昂贵的聘礼 POJ
- 昂贵的聘礼 POJ
- 昂贵的聘礼 POJ
- poj 1062 昂贵的聘礼
- POJ 1062 昂贵的聘礼
- poj 1062 昂贵的聘礼
- poj 1062 昂贵的聘礼
- poj 1062 昂贵的聘礼
- poj 1062 昂贵的聘礼
- poj 1062 昂贵的聘礼
- include指令和动作元素
- JAVA三星题之playing a TicTacToe game
- 第三部分 ARM裸机系列之教你学会刷操作系统
- Java 中泛型的全面解析
- hdu 3746 Cyclic Nacklace KMP中的nex[]应用
- poj 1602 昂贵的聘礼
- LeetCode——Peeking Iterator
- Help is needed for Dexter
- JQuery-Jquery的TreeGrid插件
- Nginx+Tomcat 做请求分发以及负载均衡
- Android 反编译详解
- Java基础之查找文件名&删除文件夹和文件
- 第二期项目前台详细分析
- ACE线程管理(一)