【最短路】codevs 1391 伊吹萃香
2015-10-25 17:22
239 查看
题目链接:http://codevs.cn/problem/1391/
题目大意:太长了,自己看题吧
不难,代码处理细节有点麻烦,我蒟蒻调了1+小时才出来QwQ
题目大意:太长了,自己看题吧
不难,代码处理细节有点麻烦,我蒟蒻调了1+小时才出来QwQ
[code]#include <iostream> #include <cstdio> #include <cstring> #include <queue> using namespace std; struct Link { int s,t,c,next; }l[50000]; struct qu { int x,b; }; bool b[6000]; int w[6000]; int r[6000]; int g[6000]; int dp[6000][3]; int cnt = 0; queue<qu> Q; int value(int x) { if(x < 0) return 0; return x; } int abs(int x) { if(x < 0) return -x; return x; } void Add_Link(int s,int t,int c) { l[++cnt].s = s; l[cnt].t = t; l[cnt].c = c; l[cnt].next = g[s]; g[s] = cnt; } void update(qu p) { int x = p.x; bool now = p.b; int q = g[x]; if(now) { if(dp[x][0] > dp[x][1] + r[x]) { dp[x][0] = dp[x][1] + r[x]; Q.push((qu){x,0}); } while(q) { bool k = b[l[q].t]^b[x]^now; if(k == 0 && dp[l[q].t][1] > dp[x][1] + value(l[q].c + abs(w[l[q].t] - w[x]))) { dp[l[q].t][1] = dp[x][1] + value(l[q].c + abs(w[l[q].t] - w[x])); Q.push((qu){l[q].t,1}); } if(k == 1 && dp[l[q].t][0] > dp[x][1] + l[q].c) { dp[l[q].t][0] = dp[x][1] + l[q].c; Q.push((qu){l[q].t,0}); } q = l[q].next; } } else { if(dp[x][1] > dp[x][0]) { dp[x][1] = dp[x][0]; Q.push((qu){x,1}); } while(q) { bool k = b[l[q].t]^b[x]^now; if(k == 1 && dp[l[q].t][0] > dp[x][0] + value(l[q].c - abs(w[l[q].t] - w[x]))) { dp[l[q].t][0] = dp[x][0] + value(l[q].c - abs(w[l[q].t] - w[x])); Q.push((qu){l[q].t,0}); } if(k == 0 && dp[l[q].t][1] > dp[x][0] + l[q].c) { dp[l[q].t][1] = dp[x][0] + l[q].c; Q.push((qu){l[q].t,1}); } q = l[q].next; } } } int main() { int n,m,s,t,c; scanf("%d%d",&n,&m); for(int i = 1;i <= n;i ++) scanf("%d",&b[i]); for(int i = 1;i <= n;i ++) scanf("%d",&w[i]); for(int i = 1;i <= n;i ++) scanf("%d",&r[i]); for(int i = 1;i <= m;i ++) { scanf("%d%d%d",&s,&t,&c); Add_Link(s,t,c); } memset(dp,63,sizeof(dp)); dp[1][b[1]] = 0; Q.push((qu){1,b[1]}); while(!Q.empty()) { qu x = Q.front(); Q.pop(); update(x); } cout << min(dp [0],dp [1]); return 0; }
相关文章推荐
- 内核源码调试及实现
- 类图中的四种关系
- 【软工】软工视频-软件生存期
- 去除MacBook屏幕下方的白条
- JDBC与Hibernate连接池
- HDU 4416 Good Article Good sentence
- 推荐程序员值得看的书籍
- confluence的权限管理
- Eclipse项目转移到Android Studio
- PC Hunter V1.4
- android--(SQLite)
- php文件操作
- 对字符串中的字母进行排序,变成有序的字符串
- 图片滚动
- C++十进制转换为任意进制
- 某软件多开代码
- iOS实时检测UITextField内容
- java容器---Map集合的体系结构
- POJ3083 Children of the Candy Corn(DFS + BFS)
- 工作/出差模块