POJ_3169_Layout
2016-09-27 20:47
513 查看
//见《挑战程序设计竞赛》第2.5.6节 #include<iostream> #include<cstdio> using namespace std; #define MIN(a,b) ((a)<(b)?(a):(b)) #define MAX_N 1000 #define MAX_ML 10000 #define MAX_MD 10000 #define INF 100000000 int N, ML, MD; int AL[MAX_ML], BL[MAX_ML], DL[MAX_ML]; int AD[MAX_MD], BD[MAX_MD], DD[MAX_MD]; int d[MAX_N];//最短距离 int main() { scanf("%d%d%d", &N, &ML, &MD); for (int i = 0; i < ML; i++) scanf("%d%d%d", AL + i, BL + i, DL + i); for (int i = 0; i < MD; i++) scanf("%d%d%d", AD + i, BD + i, DD + i); fill(d, d + N, INF); d[0] = 0; //用Bellman-Ford算法计算d for (int k = 0; k < N; k++) { //从i+1到i的权值为0 for (int i = 0; i + 1 < N; i++) { if (d[i + 1] < INF) d[i] = MIN(d[i], d[i + 1]); } //从AL到BL的权值为DL for (int i = 0; i < ML; i++) { if (d[AL[i] - 1] < INF) { d[BL[i] - 1] = MIN(d[BL[i] - 1], d[AL[i] - 1] + DL[i]); } } //从BD到AD的权值为-DD for (int i = 0; i < MD; i++) { if (d[BD[i] - 1] < INF) { d[AD[i] - 1] = MIN(d[AD[i] - 1], d[BD[i] - 1] - DD[i]); } } } int res = d[N - 1]; if (d[0] < 0) { //存在负圈 res = -1; } else if (res == INF) { res = -2; } printf("%d\n", res); return 0; }
相关文章推荐
- [转载]Activity中ConfigChanges属性的用法
- android之定时器AlarmManager
- Android java 与 javascript互访(相互调用)的方法例子
- Web布局连载——两栏固定布局(五)
- android上改变listView的选中颜色
- 转载:On having layout
- Android中FoldingLayout折叠布局的用法及实战全攻略
- 有关easyui-layout中的收缩层无法显示标题的解决办法
- jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
- JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
- Android中layout属性大全
- Android 布局文件Layout XML属性
- android layout XML解析错误的解决方法
- 基于Android LayoutInflater的使用介绍
- zend Framework中的Layout(模块化得布局)详解
- ASP.NET MVC Layout如何嵌套
- iOS App开发中Masonry布局框架的基本用法解析
- Auto Layout on iOS Versions prior to 6.0 解决办法
- Android布局
- ASP.NET MVC Layout如何嵌套