bzoj1001 平面图转对偶图
来源:互联网 发布:通山网络花店 编辑:程序博客网 时间:2024/05/01 10:02
将最大流问题先转化为最小割问题最后通过求对偶图中的最短路来解题
最短路用dij跑就好
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<vector>#include<queue>#define MAX 2000000using namespace std;struct wbysr{int dist,num;bool operator < (const wbysr &fuck)const { return dist>fuck.dist; }};int n,i,m,t,d[MAX],done[MAX];vector <int>aim[MAX];vector<int>w[MAX];void debug(){for(int i=0;i<=t;i++,printf("%d\n",i-1),printf("\n"))for(int j=0;j<aim[i].size();j++)printf("%d-%d ",aim[i][j],w[i][j]);}void dijstra(int v){d[v]=0;memset(done,0,sizeof(done)); priority_queue<wbysr> q; q.push((wbysr){0,v}); while(!q.empty()) { wbysr x=q.top(); q.pop(); int now=x.num; if(done[now])continue; done[now]=1; for(int k=0;k<aim[now].size();k++) if(d[aim[now][k]]>d[now]+w[now][k]) { d[aim[now][k]]=d[now]+w[now][k]; q.push((wbysr){d[aim[now][k]],aim[now][k]}); } }}void addedge(int from,int to,int value){aim[from].push_back(to);aim[to].push_back(from);w[from].push_back(value);w[to].push_back(value);return;}int getint(){int num;scanf("%d",&num);return num;}int main(){scanf("%d%d",&n,&m);int s=0,o;t=(n)*(m)+1; if (n == 1) {int ans,t;scanf("%d",&ans); for (int i = 2; i < m; ++ i) scanf("%d",&t),ans = min(ans,t); printf("%d\n", ans); return 0; } if (m == 1) { int ans,t;scanf("%d",&ans); for (int i = 2; i < n; ++ i) scanf("%d",&t),ans = min(ans,t); printf("%d\n", ans); return 0; } for (int i = 1; i < m; ++ i) addedge(i * 2, t, getint()); for (int i = 1; i < n - 1; ++ i) for (int j = 1; j < m; ++ j) addedge(i * (m - 1) * 2 + j * 2, (i - 1) * (m - 1) * 2 + j * 2 - 1, getint()); for (int i = 1; i < m; ++ i) addedge(0, (n - 2) * (m - 1) * 2 + i * 2 - 1, getint()); for (int i = 0; i < n - 1; ++ i) { addedge(0, i * (m - 1) * 2 + 1, getint()); for (int j = 1; j < m - 1; ++ j) addedge(i * (m - 1) * 2 + j * 2, i * (m - 1) * 2 + j * 2 + 1, getint()); addedge((i + 1) * (m - 1) * 2, t, getint()); } for (int i = 0; i < n - 1; ++ i) for (int j = 1; j < m; ++ j) addedge(i * (m - 1) * 2 + j * 2 - 1, i * (m - 1) * 2 + j * 2, getint());memset(d,63,sizeof(d));dijstra(s);//debug();printf("%d\n",d[t]);}
0 0
- bzoj1001 平面图转对偶图
- [BZOJ1001]Beijing2006 狼抓兔子|平面图转对偶图
- 【BZOJ1001】【Beijing2006】狼抓兔子(平面图转对偶图:最小割+最短路)
- 【bzoj1001】【BeiJing2006】【狼抓兔子】【网络流】【平面图转对偶图】
- 【BZOJ1001】狼抓兔子,平面图转对偶图(从最小割到最短路)
- 狼抓兔子 BZOJ1001 平面图最小割转对偶图最短路
- bzoj1001 [BeiJing2006]狼抓兔子(最小割/平面图最大流转对偶图最短路)
- hdu 3870 Catch the Theves 平面图转对偶图
- 【BZOJ2965】保护古迹 平面图转对偶图,暴力,网络流
- BZOJ 2965 保护古迹 平面图转对偶图+最小割
- BZOJ 2965 保护古迹 平面图转对偶图+最小割
- 4423: [AMPPZ2013]Bytehattan|并查集|平面图转对偶图
- 4423: [AMPPZ2013]Bytehattan 平面图转对偶图+并查集
- [BZOJ]1001 狼抓兔子 平面图转对偶图
- 网络流(三) 最小割 平面图转对偶图
- 【BZOJ】【P3051】【wc2013】【平面图】【题解】【平面图转对偶图扫描线MST倍增】
- BZOJ1001(对偶图+最短路)
- 网络流--平面图转换对偶图
- C++ builder 生成以管理员身份运行的exe
- jQuery和Ext都怎么实现继承的
- Codeforces Round #226 (Div. 2) 题解
- hdu1175(教你记录搜索时方向的变化次数)
- 二次筛素数!
- bzoj1001 平面图转对偶图
- nyoj-6-12-喷水装置
- Cannot Write to RAM for Flash Algorithms ! 的解决方法
- Java 反射机制
- c代码调用java代码
- hadoop的trash配置及使用
- hdoj1009解题报告
- 浅拷贝和深拷贝
- nyoj-14-会场安排