博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图论:平面图的对偶图
阅读量:5238 次
发布时间:2019-06-14

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

平面图我们离散课上讲过,在二维空间中可以写成不交叉边的图就是平面图,最小的非平面图有K5和K(3,3)

每个平面图都对应一个对偶图,对偶图中的最小环就是原图的最小割

如果删去对偶图中s-t这条边,就是相当于求最短路了

把原图中每个点在对偶图中标号,重新建图,在新图中跑最短路就行了

然后看一下平面图和对偶图之间的转化:

对偶图中的每一个点即为平面图中的某一个面,对偶图中任意两点间的线都是平面图中对应两平面公共边的割线,如果平面图中某一条边只属于一个面,那么在对偶图中就是一个环边

对偶图的边数等于平面图的边数,对偶图的点数等于平面图的面数

 

针对BZOJ1001

①把每一个图中的面积块当作新的点。②每一条边都与两个面相连,把面看作点后,这条边连接这两个面化作的点,权值不变。③连接起点与终点,把外面的最大平面分成两份,分别为最短路的起点与终点。④跑一边最短路即可。

我感觉难在建图上,别的都非常好说

建图必须好好研究一下

1 #include
2 #include
3 const int maxn=2000005; 4 int n,m,nm,cnt; 5 bool vi[maxn]; 6 int dis[maxn],g[maxn],q[maxn]; 7 struct Edge 8 { 9 int t,next,w;10 }e[4*maxn];11 void insert(int u,int v,int w)12 {13 cnt++;e[cnt].t=v;e[cnt].w=w;e[cnt].next=g[u];g[u]=cnt;14 cnt++;e[cnt].t=u;e[cnt].w=w;e[cnt].next=g[v];g[v]=cnt;15 }16 void spfa()17 {18 memset(dis,0x3f,sizeof(dis));19 dis[0]=0;20 int h=0,t=1;21 q[t]=0;22 vi[0]=1;23 while(h!=t)24 {25 h=h%maxn+1;26 int u=q[h];27 vi[u]=0;28 for(int tmp=g[u];tmp;tmp=e[tmp].next)29 {30 int v=e[tmp].t;31 if(dis[v]>dis[u]+e[tmp].w)32 {33 dis[v]=dis[u]+e[tmp].w;34 if(!vi[v])35 {36 t=t%maxn+1;37 vi[v]=1;38 q[t]=v;39 }40 }41 }42 }43 }44 int main()45 {46 scanf("%d%d",&n,&m);47 nm=(n*m-m-n+1)<<1;48 int x;49 for(int j=1;j

 

转载于:https://www.cnblogs.com/aininot260/p/9623272.html

你可能感兴趣的文章
【程序执行原理】
查看>>
python的多行注释
查看>>
连接Oracle需要jar包和javadoc文档的下载
查看>>
UVA 10976 - Fractions Again?!
查看>>
Dreamweaver cc新版本css单行显示
查看>>
【android】安卓的权限提示及版本相关
查看>>
JavaScript可否多线程? 深入理解JavaScript定时机制
查看>>
IOS基础学习
查看>>
PHP 导出 Excell
查看>>
Java基础教程——网络基础知识
查看>>
自己到底要的是什么
查看>>
Kruskal基础最小生成树
查看>>
ubuntu 14.04 安装搜狗拼音输入法
查看>>
浅谈算法和数据结构: 一 栈和队列
查看>>
Java内部类详解
查看>>
【hdu 1429】胜利大逃亡(续)
查看>>
图论-次短路求法
查看>>
What's New for Visual C# 6.0
查看>>
ExtJs学习笔记之ComboBox组件
查看>>
关于收费软件
查看>>