平面图转对偶图:先在原图中加一个s->t的边,然后对每个面建一个点,对每条分隔两个面的边加一条连接这两个面对应点的边,边权等于原边权。

然后从刚才加的s->t分割出来的两面对应的两个点跑最短路,求出来的就是s到t的最小割。

要特判n==0||m==0的情况

然后我特判的那个点就T了一万次,在抄elijahqi巨佬的代码的时候才发现:

我是这样写的:

...
#define MIN(x,y) (x<y?x:y)
... ....ans=MIN(ans,read())
....

这能不T就有鬼了吧

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#include<cmath>
#include<ctime>
#include<set>
#define pa pair<int,int>
#define lowb(x) ((x)&(-(x)))
#define REP(i,n0,n) for(i=n0;i<=n;i++)
#define PER(i,n0,n) for(i=n;i>=n0;i--)
#define MAX(a,b) ((a>b)?a:b)
#define MIN(a,b) ((a<b)?a:b)
#define CLR(a,x) memset(a,x,sizeof(a))
#define rei register int
using namespace std;
const int maxn=;
typedef long long ll; ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} struct Edge{
int a,b,l,ne;
}eg[maxn*maxn*];
int N,M,egh[maxn*maxn*],ect;
int id[maxn][maxn][],pct;
int dis[maxn*maxn*];bool flag[maxn*maxn*];
priority_queue<pa,vector<pa>,greater<pa> > q; inline void adeg(int a,int b,int l){
eg[ect].a=a;eg[ect].b=b;eg[ect].l=l;
eg[ect].ne=egh[a];egh[a]=ect++;
}
inline void adeg2(int a,int b,int c){adeg(a,b,c);adeg(b,a,c);} inline int dijkstra(int S,int E){
CLR(dis,);dis[S]=;
q.push(make_pair(,S));
while(!q.empty()){
int p=q.top().second;q.pop();
if(p==E) break;
if(flag[p]) continue;
for(rei i=egh[p];i!=-;i=eg[i].ne){
rei b=eg[i].b;
if(dis[b]>dis[p]+eg[i].l){
dis[b]=dis[p]+eg[i].l;
q.push(make_pair(dis[b],b));
}
}flag[p]=;
}return dis[E];
} int main(){
//freopen(".in","r",stdin);
rei i,j,k;
N=rd(),M=rd(); if(N==||M==){
if(N<M) swap(N,M);int ans=0x3f3f3f3f;
REP(i,,N-) ans=min(ans,(int)rd());printf("%d\n",ans);
return ;
}
CLR(egh,-);
id[][][]=++pct;id[][][]=++pct;
REP(i,,N-) REP(j,,M-) id[i][j][]=++pct,id[i][j][]=++pct;
REP(i,,N){
REP(j,,M-){
if(i==) adeg2(id[][j][],id[][][],rd());
else if(i==N) adeg2(id[N-][j][],id[][][],rd());
else adeg2(id[i-][j][],id[i][j][],rd());
}
}
REP(i,,N-){
REP(j,,M){
if(j==) adeg2(id[i][][],id[][][],rd());
else if(j==M) adeg2(id[i][M-][],id[][][],rd());
else adeg2(id[i][j-][],id[i][j][],rd());
}
}
REP(i,,N-){
REP(j,,M-){
adeg2(id[i][j][],id[i][j][],rd());
}
}
printf("%d\n",dijkstra(id[][][],id[][][])); return ;
}

bzoj1001/luogu4001 狼抓兔子 (最小割/平面图最小割转对偶图最短路)的更多相关文章

  1. [bzoj1001][BeiJing2006]狼抓兔子_网络流_最小割转对偶图

    狼抓兔子 bzoj-1001 BeiJing2006 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还 ...

  2. BZOJ1001 BeiJing2006 狼抓兔子 【网络流-最小割】*

    BZOJ1001 BeiJing2006 狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较 ...

  3. 【BZOJ1001】狼抓兔子(平面图转对偶图,最短路)

    [BZOJ1001]狼抓兔子(平面图转对偶图,最短路) 题面 BZOJ 洛谷 题解 这题用最小割可以直接做 今天再学习了一下平面图转对偶图的做法 大致的思路如下: 1.将源点到汇点中再补一条不与任何线 ...

  4. 【BZOJ1001】狼抓兔子(网络流)

    [BZOJ1001]狼抓兔子(网络流) 题面 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨, ...

  5. [BZOJ1001][BeiJing2006]狼抓兔子(最小割转最短路|平面图转对偶图)

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 31805  Solved: 8494[Submit][ ...

  6. BZOJ1001: [BeiJing2006]狼抓兔子 [最小割 | 对偶图+spfa]

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 19528  Solved: 4818[Submit][ ...

  7. bzoj1001: [BeiJing2006]狼抓兔子 -- 最小割

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MB Description 现在小朋友们最喜欢的"喜羊羊与灰太狼 ...

  8. bzoj1001: [BeiJing2006]狼抓兔子(初识是你最小割)

    1001: [BeiJing2006]狼抓兔子 题目:传送门 题解: 听说这题当初是大难题...可惜当年没有网络流hahahha 现在用网络流的思想就很容易解决了嘛 给什么连什么,注意是双向边,然后跑 ...

  9. 【BZOJ1001】狼抓兔子

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 7530  Solved: 1724[Submit][S ...

随机推荐

  1. C# 调用微信接口上传素材和发送图文消息

    using Common;using Newtonsoft.Json.Linq;using System;using System.IO;using System.Net;using System.T ...

  2. RDMA技术解析

    文章出处:https://mp.weixin.qq.com/s/pW-tQR4AYr1Gtd4dpHVW7w 摘要:远程直接内存访问(即Remote Direct Memory Access)是一种直 ...

  3. linux-IO重定向-文本流重定向

    输出重定向的追加和覆盖 标准输出就这两种: 覆盖和追加 >> 是重定向操作符 1 是 命令的文件描述符 重定向操作符合文件描述符之间不能存在空白符 否则1会被当做是文件被读取 将正确和错误 ...

  4. bootstrap面试题

    1.你能描述一下渐进增强和优雅降级之间的不同吗? 优雅降级:Web站点在所有新式浏览器中都能正常工作,如果用户使用的是老式浏览器,则代码会检查以确认它们是否能正常工作.由于IE独特的盒模型布局问题,针 ...

  5. Bing词典案例分析

    一.调研评测 Bug 1 : 当鼠标移动到可点击的地方的时候,光标的样子并没有变成手指状而是插入符号状.这影响了用户对按钮是否可用的判断,也会让用户在一定程度上不适应,不利于软件的长期发展. Bug  ...

  6. <<梦断代码>>阅读笔记三

    看完了这最后三分之一的<梦断代码>,意味着这本软件行业的著作已经被我粗略地过了一遍. 在这最后三分之一的内容中,我深入了解了在大型软件项目的运作过程中存在的困难和艰辛.一个大型软件项目的成 ...

  7. 转发:Android开发?用C#!!

    转发自 最近偶然在QQ技术群里见到有人提起用C#开发Android,当时我感觉到很诧异:Android不是只能用Java开发吗?何时可以使用C#了?那个群友便告知我:mono. 百度一下吧!搜到了mo ...

  8. 关于HashMap和Hashtable的区别

    Hashtable的应用非常广泛,HashMap是新框架中用来代替Hashtable的类,也就是说建议使用HashMap,不要使用Hashtable.可能你觉得Hashtable很好用,为什么不用呢? ...

  9. 递归拼装Tree结构数据

    @Override public List<Map<String, Object>> queryListTree() { List<Map<String,Objec ...

  10. CSS 居中(拿来主义自用)

    居中是我们使用css来布局时常遇到的情况.使用css来进行居中时,有时一个属性就能搞定,有时则需要一定的技巧才能兼容到所有浏览器,本文就居中的一些常用方法做个简单的介绍. 注:本文所讲方法除了特别说明 ...