设为首页 加入收藏

TOP

bzoj2007 NOI2010 海拔(对偶图)(二)
2019-02-12 18:08:01 】 浏览:177
Tags:bzoj2007 NOI2010 海拔 对偶
; int dis[N],vis[N]; int dij() { memset(dis,0x3f,sizeof(dis)); q.push(make_pair(0,S)); dis[S] = 0; for(int i = 1;i <= T;++i) { if(q.empty()) break; pi k = q.top(); while(vis[k.second] && !q.empty()) k = q.top(),q.pop(); int u = k.second; if(vis[u]) break; vis[u] = 1; for(int i = head[u];i;i = e[i].nxt) { int v = e[i].v; if(vis[v]) continue; if(dis[v] > dis[u] + e[i].w) { dis[v] = dis[u] + e[i].w; q.push(make_pair(dis[v],v)); } } } return dis[T]; } int main() { int n = read(); int now; S = n * n + 1,T = S + 1; now = 1; for(int i = 1;i <= n + 1;++i) { for(int j = 1;j <= n;++j,++now) { int w = read(); if(i == 1) add(now,T,w); else if(i == n + 1) add(S,now - n,w); else add(now,now - n,w); } } now = 1; for(int i = 1;i <= n;++i) { for(int j = 1;j <= n + 1;++j,++now) { int w = read(); if(j == 1) add(S,now,w); else if(j == n + 1) add(--now,T,w); else add(now - 1,now,w); } } now = 1; for(int i = 1;i <= n + 1;++i) { for(int j = 1;j <= n;++j,++now) { int w = read(); if(i == 1 ||i == n + 1) continue; add(now - n,now,w); } } now = 1; for(int i = 1;i <= n;++i) { for(int j = 1;j <= n + 1;++j,++now) { int w = read(); if(j == 1 || j == n + 1) continue; add(now,now - 1,w); } --now; } cout<<dij(); return 0; }
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇L1-030 一帮一 下一篇L1-027 出租

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目