博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【hdu 4859】海岸线(图论--网络流最小割)
阅读量:6592 次
发布时间:2019-06-24

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

题意:有一个区域,有'.'的陆地,'D'的深海域,'E'的浅海域。其中浅海域可以填充为陆地。这里的陆地区域不联通,并且整个地图都处在海洋之中。问填充一定浅海域之后所有岛屿的最长的海岸线之和。

解法:最小割。从“分隔”陆地和海域可以想到“割”的概念,然后我们先不考虑浅海域,要深海域和陆地的对数尽量大,也就是相同的地理构造对数尽量小。

      于是我们建立一个二分图,深海域和陆地都分列两侧,对于相邻的一个在左,一个在右,也就是“行+列”是奇数的放左,偶数的在右。而对于相邻的深海域和陆地,它们在图中理应分列两侧,才有“相连”的意义。(唉,我算是“梗着脖子”地在解释......~(-仝-)~)于是可以深海域的奇数的在左,而陆地的偶数的在左。
      接着建立一个源点和汇点,左侧的点与源点相连,右侧的点与汇点相连。由于无约束,边容量为INF。而4个方向相邻的都“相连”,便建边,容量为1,表示割这条边的代价就是1。又因为这整个地图都处在海洋之中,也就是这个地图外围是一圈深海域,这是隐含条件,所以还需要另外建这些点和对应的边。
      最后,用最大流算法求出最小割,表示相同的地理构造的最少的对数,而最长的海岸线就是最多的不同的构造,也就是总对数-最少的相同的地理构造的对数。

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 8 const int N=50,NN=3000,MM=30000,INF=20000; 9 int n,m,len=1; 10 int last[NN],d[NN]; 11 int dx[4]={
0,0,1,-1},dy[4]={
1,-1,0,0}; 12 char s[N][N]; 13 struct node{
int x,y,fl,next;}a[MM]; 14 queue
q; 15 16 int mmin(int x,int y) { return x
n||y>m) continue;103 ins(t,tt,1);104 }105 }106 }107 int ans=Max_flow(st,ed);108 ans=(n-1)*m+(m-1)*n-ans;109 printf("Case %d: %d\n",kase,ans);110 }111 return 0;112 }

 

转载于:https://www.cnblogs.com/konjak/p/6059703.html

你可能感兴趣的文章
INSTALL_FAILED_OLDER_SDK
查看>>
VS2005内存泄漏检测方法[转载]
查看>>
M1 spec
查看>>
洛谷P1948 [USACO08JAN]电话线Telephone Lines
查看>>
0619-dedeCMS的安装、重装、目录说明、基本操作及注意事项
查看>>
【转】SQL Server 连接error: 40 - 无法打开到 SQL Server 的连接错误解决方案
查看>>
19.04.08-小练习
查看>>
ES6第二篇:变量的解构赋值
查看>>
关于C语言的问卷调查
查看>>
理解session 和 cookie 哦
查看>>
OK335xS EMMC Partition hacking
查看>>
三角形面积 蓝桥杯
查看>>
form的一个问题
查看>>
数据库操作
查看>>
samba介绍和安装
查看>>
利用JavaScript jQuery实现图片无限循环轮播(不借助于轮播插件)-----转载
查看>>
函数的原型对象和原型链?
查看>>
js中的面向对象
查看>>
050:navie时间和aware时间详解
查看>>
如何正确地在Spring Data JPA和Jackson中用上Java 8的时间相关API(即JSR 310也即java.time包下的众神器)...
查看>>