意甲冠军:这个问题刚开始的问题,有错误的含义,原桥始建于一条直线。无论多么遥远。

思维:dfs寻求答案的第一个问题。然后做最小生成树,双方不能大桥将设置INF即可了。然后假设用到INF的边就加上0即可了。这样跑一遍最小生成树就是答案。

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<queue>
#include<set>
#include<cmath>
#include<bitset>
#define mem(a,b) memset(a,b,sizeof(a))
#define lson i<<1,l,mid
#define rson i<<1|1,mid+1,r
#define llson j<<1,l,mid
#define rrson j<<1|1,mid+1,r
#define INF 0x7fffffff
#define maxn 55
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int n,m,cnt,vis[maxn][maxn],mm[maxn][maxn],sum;
int a[1000005],b[1000005],tmp,sum2,sum3;
char s[maxn][maxn];
int dist[8][2]= {1,0,1,1,1,-1,0,1,0,-1,-1,0,-1,1,-1,-1};
int f[1000005];
void dfs(int x,int y,int ans)
{
for(int i=0; i<8; i++)
{
int xx=x+dist[i][0],yy=y+dist[i][1];
if(xx>=0&&xx<n&&yy>=0&&yy<m&&!vis[xx][yy]&&s[xx][yy]=='#')
{
vis[xx][yy]=1;
f[mm[xx][yy]]=f[ans];
dfs(xx,yy,ans);
}
}
}
int find(int x)
{
return f[x]==x?x:f[x]=find(f[x]);
}
struct abc
{
int u,v,w;
bool operator<(const abc &a)const
{
return w<a.w;
}
} e[1000005];
void kruscal()
{
sort(e,e+tmp);
int sum=1;
for(int i=0; i<tmp&&sum!=cnt; i++)
{
int x=find(e[i].u),y=find(e[i].v);
if(x!=y)
{
sum++;
sum3+=(e[i].w==INF?0:e[i].w);
sum2++;
f[x]=y;
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=0; i<n; i++)
scanf("%s",s[i]);
mem(vis,0);
cnt=tmp=0;
mem(f,0);
mem(mm,0);
int sum1=0;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
if(s[i][j]=='#')
{
mm[i][j]=++cnt;
a[cnt]=i,b[cnt]=j;
f[cnt]=cnt;
}
for(int i=1; i<=cnt; i++)
for(int j=i+1; j<=cnt; j++)
{
e[tmp].u=i,e[tmp].v=j;
if(abs(a[i]-a[j])<=1&&abs(b[i]-b[j])<=1)
e[tmp++].w=0;
else if(abs(a[i]-a[j])<=1)
e[tmp++].w=abs(b[i]-b[j])-1;
else if(abs(b[i]-b[j])<=1)
e[tmp++].w=abs(a[i]-a[j])-1;
else e[tmp++].w=INF;
}
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
if(s[i][j]=='#'&&!vis[i][j])
{
vis[i][j]=1;
dfs(i,j,mm[i][j]);
sum1++;
}
kruscal();
printf("%d\n%d %d\n",sum1,sum2,sum3);
return 0;
}

wikioi 1002 旁路的更多相关文章

  1. 【wikioi】1002 搭桥(dfs+最小生成树)

    http://wikioi.com/problem/1002/ 今天开始又开始刷水了哈T_T.照着hzwer神犇的刷题记录刷!!! 题解: 一开始我也不会,但是我想到了直接爆搜T_T. 好吧,题解. ...

  2. Bestcoder#5 1002

    Bestcoder#5 1002 Poor MitsuiTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  3. acm 1002 算法设计

    最近突然想往算法方向走走,做了做航电acm的几道题 二话不说,开始 航电acm 1002 题主要是处理长数据的问题,算法原理比较简单,就是用字符数组代替int,因为int太短需要处理的数据较长 下面是 ...

  4. BestCoder Round 69 Div 2 1001&& 1002 || HDU 5610 && 5611

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5610 如果杠铃总质量是奇数直接impossible 接着就考验耐心和仔细周全的考虑了.在WA了三次后终于发 ...

  5. 1002. A+B for Polynomials (25)

    题目链接:https://www.patest.cn/contests/pat-a-practise/1002 原题如下: This time, you are supposed to find A+ ...

  6. 字符串专题:map POJ 1002

    第一次用到是在‘校内赛总结’扫地那道题里面,大同小异 map<string,int>str 可以专用做做字符串的匹配之类的处理 string donser; str [donser]++ ...

  7. 1002 Phone Numbers 解题报告

    1002. Phone Numbers Time limit: 2.0 secondMemory limit: 64 MB In the present world you frequently me ...

  8. HOJ 1001: A+B; 1002: A+B+C

    两道水题,用来熟悉 HOJ 的提交系统. 1001:输入两个整数 A, B (0 <= A,B <= 10),输出 A+B. #include <iostream> using ...

  9. 杭电acm 1002 大数模板(一)

    从杭电第一题开始A,发现做到1002就不会了,经过几天时间终于A出来了,顺便整理了一下关于大数的东西 其实这是刘汝佳老师在<算法竞赛 经典入门 第二版> 中所讲的模板,代码原封不动写上的, ...

随机推荐

  1. C++学习笔记33 转换操作符

    有时候,我们要转换为类类型和类类型,同时,这两个类继承关系不存在,这时候我们就需要一些所谓的转换操作符运营商. 一个简单的例子.类别A转换为int种类 #include <iostream> ...

  2. BZOJ 2006 NOI2010 超级钢琴 划分树+堆

    题目大意:给定一个序列.找到k个长度在[l,r]之间的序列.使得和最大 暴力O(n^2logn),肯定过不去 看到这题的第一眼我OTZ了一下午... 后来研究了非常久别人的题解才弄明确怎么回事...蒟 ...

  3. Android:简单的弹幕效果达到

    首先,效果图.分类似至360检测到的骚扰电话页面: 布局非常easy,上面是一个RelativeLayout,以下一个Button. 功能: (1)弹幕生成后自己主动从右側往左側滚动(Translat ...

  4. effective c++ 条款9 do not call virtual function in constructor or deconstructor

    在构造函数中不要调用virtual函数,调用了也不会有预期的效果. 举个例子 class Transaction { public: Transaction() { log(); } ; } clas ...

  5. HDFS建筑与shell操作

    一个.hadoop1.1.0演示 hadoop它适合于大容量数据存储和分布式计算平台 hadoop核心由hdfs和mapreduce组成 hdfs这是一个主从结构,仅有一个.是namenode:从节点 ...

  6. 读书时间《JavaScript高级程序设计》四:BOM,客户端检测

    隔了一段时间,现在开始看第8章. 第8章:BOM BOM提供了很多对象,用于访问浏览器的功能.BOM的核心对象是window,它表示浏览器的一个实例. window对象是通过javascript访问浏 ...

  7. Bulk Insert具体订单

    Bulk Insert具体订单 BULK INSERT与用户指定的格式的数据文件复制到数据库表或视图. 语法: BULK INSERT [ [ 'database_name'.][ 'owner' ] ...

  8. BibTex (.bib) 文件的凝视

    1) 将某个參考文献所有去掉,能够去掉前面的『@』 样例 @article{##,    author = {###},    title = {###},    journal = {###},   ...

  9. SQLServer 扫盲

    原文:SQLServer 扫盲 谨以本文记录本人成长历程,并分享给各位SQL Server数据库管理系统使用者.本系列包含个人认为一个DBA应该具有的各项素质,系列文章将以下面列表展示,将持续更新,敬 ...

  10. 简介Customer Care Accelerator (CCA)

    几个月前,我们发表了CRM4.0的附属插件:Customer Care Accelerator (CCA). 年以来CCA已经存在,我们这些新手在CRM的世界里, Customer Care Fram ...