poj1062 native dij
2015-07-15 15:12
239 查看
就是dij求最短路,输入的时候注意用s[0][i]保存物品本身的值
交换物品不是两两之间符合等级就可以,是整个交换过程都要符合
所以枚举一下等级每次都dij好了=,=
每次枚举把不符合的v值直接设为1,是一种很好的思路。。。。=,=
交换物品不是两两之间符合等级就可以,是整个交换过程都要符合
所以枚举一下等级每次都dij好了=,=
每次枚举把不符合的v值直接设为1,是一种很好的思路。。。。=,=
#include <iostream> #include<stdio.h> #include<cctype> #include<cstdlib> #include<math.h> #include<algorithm> #include<cstring> #include<string> #include<vector> #include<queue> #include<map> #include<set> #include<stack> using namespace std; #define mod 1000000007 #define FOR(i,j,k) for(int i=j;i<=k;i++) const int inf=0x3f3f3f3f; int s[110][110]; int d[110]; int v[110]; int lv[110]; int n; void dijkstra() { for(int i=1;i<=n;i++) d[i]=s[0][i]; //d[begin]=0; //memset(v,0,sizeof(v)); for(int i=1;i<=n;i++) { int x=-1; for(int j=1;j<=n;j++) if(!v[j]) if(x==-1||d[j]<d[x]) x=j; v[x]=1; for(int j=1;j<=n;j++) if(!v[j]) { int temp=d[x]+s[x][j]; if(temp<d[j]) d[j]=temp; } } } int main() { memset(lv,0,sizeof(lv)); int m; cin>>m>>n; FOR(i,1,n) FOR(j,1,n) s[i][j]=inf; int t; FOR(i,1,n) { cin>>s[0][i]>>lv[i]>>t; while(t--) { int z,u; cin>>z>>u; s[z][i]=u; } } int ans=inf; FOR(i,1,n) { int maxlv=lv[i]; for(int j=1;j<=n;j++){ if(lv[j]>maxlv||maxlv-lv[j]>m) v[j]=1; else v[j]=0; } dijkstra(); ans=min(ans,d[1]); } cout<<ans<<endl; }
相关文章推荐
- 高通安卓调试LCD几方面总结
- 如何测试网页的登陆界面
- python程序的pdb调试方法
- Mysqli基础知识
- Mac软件如何安装与卸载
- ldap主从
- C#通过windows注册表获取软件清单的方法
- AFNetWorking取消当前的网络请求
- ZJOI2002昂贵的聘礼题解
- android http通信之httpclient
- 表达式树
- mysql中组内排序编号的一种实现方法。
- Highcharts动态赋值学习
- block,inline和inline-block概念和区别
- JNI用法小例子
- [Spring MVC] - JSP + Freemarker视图解释器整合
- C++的动态绑定和静态绑定
- Add Two Numbers
- 奔跑中的2015--碎碎随笔
- listview中因复用产生展示错乱的解决方法