题目描述 Description

有一矩形区域的城市中建筑了若干建筑物,如果某两个单元格有一个点相联系,则它们属于同一座建筑物。现在想在这些建筑物之间搭建一些桥梁,其中桥梁只能沿着矩形的方格的边沿搭建,如下图城市1有5栋建筑物,可以搭建4座桥将建筑物联系起来。城市2有两座建筑物,但不能搭建桥梁将它们连接。城市3只有一座建筑物,城市4有3座建筑物,可以搭建一座桥梁联系两栋建筑物,但不能与第三座建筑物联系在一起。

输入描述 Input Description

在输入的数据中的第一行包含描述城市的两个整数r 和c, 分别代表从北到南、从东到西的城市大小(1 <= <= 50 and 1 <=  c <= 50). 接下来的r 行, 每一行由个(“#”)和(“.”)组成的字符. 每一个字符表示一个单元格。“#”表示建筑物,“.”表示空地。

输出描述 Output Description

在输出的数据中有两行,第一行表示建筑物的数目。第二行输出桥的数目和所有桥的总长度。

样例输入 Sample Input

样例1

3 5

#...#

..#..

#...#

样例2

3 5

##...

.....

....#

样例3

3 5

#.###

#.#.#

###.#

样例4:

3 5

#.#..

.....

....#

样例输出 Sample Output

样例1

5

4 4

样例2

2

0 0

样例3

1

0 0

样例4

3

1 1

数据范围及提示 Data Size & Hint

见描述

/*
MST,建图略麻烦
*/
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#define ll long long
#define fo(i,l,r) for(int i = l;i <= r;i++)
#define fd(i,l,r) for(int i = r;i >= l;i--)
using namespace std;
const int N = 25005;
ll read(){ll x=0,f=1;char ch=getchar();while(!(ch>='0'&&ch<='9')){if(ch=='-')f=-1;ch=getchar();};while(ch>='0'&&ch<='9'){x=x*10+(ch-'0');ch=getchar();};return x*f;
}
struct edge{int u;int v;int w;friend bool operator < (edge a,edge b){return a.w < b.w;}
}e[N*3];
int n,m,fa[N];
char mp[105][105];
int cnt,ans1,ans2,ans3;
bool judge(int y,int x){if(y < 1 || y > n || x < 1 || x > m || mp[y][x] != '#') return false;return true;
}
void input(){n =read();m =read();char tmp;fo(i,1,n){fo(j,1,m){tmp = getchar();while(tmp !='.' && tmp != '#') tmp = getchar();mp[i][j] = tmp;if(tmp == '#') ans1++;}}
}
inline int jdz(int x){if(x<0)x=-x;return x;
}
inline void ins(int y1,int x1,int y2,int x2){cnt++;e[cnt].u = (y1-1)*m + x1;e[cnt].v = (y2-1)*m + x2;e[cnt].w = jdz(y1-y2) + jdz(x1-x2);if(y1 != y2) e[cnt].w--;if(x1 != x2) e[cnt].w--;//cout<<y1<<" "<<x1<<" "<<y2<<" "<<x2<<" "<<e[cnt].w<<endl;
}
void build(){fo(i,1,n){fo(j,1,m){if(mp[i][j] != '#') continue;fo(k,j+1,m){if(judge(i,k)) ins(i,j,i,k);if(judge(i+1,k)) ins(i,j,i+1,k);if(judge(i-1,k)) ins(i,j,i-1,k);}fo(k,i+1,n){if(judge(k,j)) ins(i,j,k,j);if(judge(k,j+1)) ins(i,j,k,j+1);if(judge(k,j-1)) ins(i,j,k,j-1);}}}}
int findf(int x){return x == fa[x] ? x : fa[x] = findf(fa[x]);
}
void mst(){sort(e+1,e+1+cnt);fo(i,1,N-10) fa[i] = i;int u,v;fo(i,1,cnt){u = e[i].u;v = e[i].v;u = findf(u);v = findf(v);if(u != v){fa[u] = v;if(!e[i].w)ans1--;if(e[i].w)ans2++;ans3 += e[i].w;}}cout<<ans1<<endl<<ans2<<" "<<ans3;
}
int main(){input();build();mst();return 0;
} 

转载于:https://www.cnblogs.com/hyfer/p/6035592.html

codevs1002 搭桥相关推荐

  1. Premiere Pro2.0用DebugMode2.3搭桥小日本4.0输出图解

    看图说话,不懂的多试试看 首先明确几点: 1.3个软件:Premiere Pro2.0.DebugMode(帧服务器).小日本(TMPGEnc 4.0 XPress) 2.渲染过程是在小日本中完成,与 ...

  2. codevs 1002 搭桥

    codevs 第一道题 先贴描述 1002 搭桥  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果 题目描述 Description 有一矩 ...

  3. 借收购搭桥,风河Workbench软件环境涵盖至测试领域

    借收购搭桥,风河Workbench软件环境涵盖至测试领域 上网时间 : 2005年03月24日   打 印 版   推 荐 给 同 仁   发 送 查 询 美国风河系统公司(Wind River Sy ...

  4. 转:为 setuptools 开路搭桥

    为 setuptools 开路搭桥 赖勇浩(http://laiyonghao.com) 在 这里,我们有些网站无法访问.其中对我影响比较大的一个就是安装某些 Python 模块的时候,easy_in ...

  5. Swift 2 中为实存类型和泛型搭桥牵线

    本文讲的是Swift 2 中为实存类型和泛型搭桥牵线, 我们又回到了讨论泛型的另一个章节,来讨论泛型,有其他类型的协议和在 Swift 2 中的其他类型的系统限制.这次我们会深入讨论一个有趣的变通方法 ...

  6. HyperDAO跨链搭桥:启动万链自由交换时代

    自2017年以来,HyperDAO 致力为众多区块链项目提供筹募资金服务,目前已经拥有超过 5 万名活跃用户,遍布于 4 0 多个国家.团队相信在"万链竞争"的时代下,未来区块链发 ...

  7. puzzle(0711)《机关排布》接水管、搭桥

    目录 接水管 接水管(跨边) 3D接水管 2*3*3模式 2*4*4模式 3*5*5模式 水管大师 搭桥 7x7 10*10 15*15 接水管 把所有线路全部连起来. 在线play 4*4    1 ...

  8. 大概是全网最详细的Electron ipc 讲解(二)——渲染进程与渲染进程的搭桥牵线

    希沃ENOW大前端 公司官网:CVTE(广州视源股份)[1] 团队:CVTE旗下未来教育希沃软件平台中心enow团队 「本文作者:」 image.png 前言 你盼世界,我盼望你无 bug .Hell ...

  9. 关于“搭桥”游戏生成随机地图的设计思路

    是很久以前写的一个小游戏.名字为:Bridge Puzzle Game. 是一款益智类的小游戏. 游戏链接:http://www.puzzle-bridges.com/ 游戏中最重要的一个功能是随机生 ...

最新文章

  1. Linux软raid创建和维护
  2. HALCON双目重建
  3. python exe文件运行依赖环境_python将py代码文件转换为EXE脱离环境运行
  4. atheros蓝牙设备驱动 小米_小米Air 13笔记本黑苹果WiFi蓝牙硬件改装方案二
  5. java编程实现素数环_结对编程(JAVA实现)
  6. 揭秘!业界创新的代码仓库加密技术
  7. 学生管理系统服务器端设计,学生信息管理系统设计与实现
  8. Java+Selenium自动化对非输入框的日历或日期控件的处理
  9. android+wear+游戏,技术帝:Android Wear手表运行一代PS游戏
  10. 成为埃森哲阿里巴巴事业部“创始成员”
  11. HTML5 — 知识总结篇《VII》【图片元素】
  12. 超大图片(4000×3000像素)的畸变矫正,python+OpenCV实现
  13. json数组排序,深拷贝,浅拷贝,删除,增加,筛选,
  14. 2021-5-1电脑配置及组装教程
  15. 手机怎么识别图中文字?这两个方法靠谱
  16. 关于mybatis整合spring时报java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/Trasactionwar
  17. STM32CubeMX SDRAM的使用(二)
  18. 9小时突破1000亿,你以为这就是阿里双十一的最大胜利?
  19. 子数组(Subarray)
  20. python 数字转换成汉字,Python实现把数字转换成中文

热门文章

  1. 英特尔更新人工智能产品线,新品性能达到竞品6倍
  2. 微软推出Python入门课,登上GitHub趋势榜第一
  3. 原理 msc_解析应用在气象站中的GPRS通信原理及优势
  4. matlab7.0 win7 64,安装matlab7.0出现问题,我是win7+64位系统,求解
  5. 大专学完出来学计算机,浙江2021年计算机学校读出来是什么文凭
  6. 包区别 版本_详解Linux下二进制包、源代码包、rpm包区别与联系
  7. 微博面试Java,微博java开发工程师面试题整理
  8. gomarket服务器位置,ANZHI安智市场 Gomarket
  9. 嵌入式linux硬件成本,嵌入式Linux驱动和固件有何区别?供应商是如何用固件压缩成本的?...
  10. mysql decode语句_mysql数据灾难恢复方案