博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1001 平面图与对偶图的转化 最短路Or最大流
阅读量:7136 次
发布时间:2019-06-28

本文共 2287 字,大约阅读时间需要 7 分钟。

思路:

1.按照题意求最小割 转换成最大流用Dinic解
2. 转换成对偶图 求最短路
Dinic:

//By SiriusRen#include 
#include
#include
#include
using namespace std;#define N 1100000int n,m,first[N],next[N*6],v[N*6],w[N*6],tot,jy,ans,vis[N],S,T,xx,pos[N];void Add(int x,int y,int z){w[tot]=z,v[tot]=y,next[tot]=first[x],first[x]=tot++;}void add(int x,int y,int z){Add(x,y,z),Add(y,x,z);}bool tell(){ memset(vis,-1,sizeof(vis)),vis[S]=0; queue
q;q.push(S); while(!q.empty()){ int t=q.front();q.pop(); for(int i=first[t];~i;i=next[i]) if(w[i]&&vis[v[i]]==-1) vis[v[i]]=vis[t]+1,q.push(v[i]); }return vis[T]!=-1;}int zeng(int x,int y){ if(x==T)return y; int r=0; for(int i=first[x];~i&&y>r;i=next[i]) if(w[i]&&vis[v[i]]==vis[x]+1){ int t=zeng(v[i],min(y-r,w[i])); w[i]-=t,w[i^1]+=t,r+=t; } if(!r)vis[x]=-1; return r;}int main(){ memset(first,-1,sizeof(first)); scanf("%d%d",&n,&m); S=m+1,T=n*m+m; for(int i=1;i<=n;i++)for(int j=1;j

Dijkstra:

这里写图片描述
这么转成对偶图
在原平面图中添加一条从起点S到终点T的边,会增加一个区域S’。
无限大的区域设为T’。
把加边后的平面图按照上面的方法转化为对偶图。
删去边S’-T’。
此时S-T的最小割大小等于S’到T’的最短路长度。

Ps:需要特判n=1|m=1的情况

//By SiriusRen#include 
#include
#include
using namespace std;#define M 1111*1111*6int n,m,a[1005][1005],b[1005][1005],c[1005][1005],T=2000*1005;int first[M/3],next[M],v[M],w[M],tot,vis[M/3],d[M/3];void Add(int x,int y,int z){w[tot]=z,v[tot]=y,next[tot]=first[x],first[x]=tot++;}struct Node{
int now,weight;}jy;bool operator < (Node a,Node b){
return a.weight>b.weight;}void Dijkstra(){ priority_queue
pq;pq.push(jy); while(!pq.empty()){ Node t=pq.top();pq.pop(); if(vis[t.now])continue; for(int i=first[t.now];~i;i=next[i])if(d[v[i]]>d[t.now]+w[i]) d[v[i]]=d[t.now]+w[i],jy.now=v[i],jy.weight=d[v[i]],pq.push(jy); }printf("%d\n",d[T]=0x3f3f3f3f?d[T]:0);}void add(int x,int y,int z){Add(x,y,z),Add(y,x,z);}int main(){ memset(first,-1,sizeof(first)),memset(d,0x3f,sizeof(d)),d[0]=0; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)for(int j=1;j

这里写图片描述

效率竟然差不多?

转载于:https://www.cnblogs.com/SiriusRen/p/6532136.html

你可能感兴趣的文章
nginx服务器出现504 gateway time-out怎么解决
查看>>
Java-实现链表的基本操作
查看>>
部署android开发环境总结
查看>>
我的友情链接
查看>>
利用makefile构建c++项目的思路介绍
查看>>
ssh的反向隧道
查看>>
F5 DDoS防御小妙招:减轻DDoS***危害的六大最佳方法
查看>>
echo
查看>>
MariaDB,MySQL中存储过程的学习笔记
查看>>
一张图诠释linux系统启动过程
查看>>
载入jQuery库的最佳方法
查看>>
系统错误提示修复Repair Filesystem
查看>>
【DAY20】Socket编程的补充2
查看>>
Openstack 网络服务Neutron [五]
查看>>
如何看硬盘SMART参数----用HDtune工具查看
查看>>
PUTTY使用Ctrl+s僵死的问题
查看>>
验证码识别技术研究
查看>>
WSDL文件生成java类
查看>>
我的友情链接
查看>>
CentOS7配置本地镜像及安装gluster服务
查看>>