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

思维: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. 移植kl档,但调用默认Generic.kl解决的方法

    从飞机到现在移植模型来开发遥控器按键,调查发现,大部分的功能键始终没有任何效果. 跑 dumpsys input 要查看当前的关键kl, 查找KeyLayoutFile它原来是默认Generic.kl ...

  2. SignalR与ActiveMQ

    SignalR与ActiveMQ结合构建实时通信   一.概述 本教程主要阐释了如何利用SignalR与消息队列的结合,实现不同客户端的交互 SignalR如何和消息队列交互(暂使用ActiveMQ消 ...

  3. [INS-32052] Oracle基文件夹和Oracle主文件夹位置同样

    1.错误描写叙述 [INS-32052] Oracle基文件夹和Oracle主文件夹位置同样 2.错误原因    Oracle基文件夹和Oracle主文件夹位置同样 3.解决的方法    Oracle ...

  4. 输出A打头的字符串

    题目描述 输出n个字符串,把其中以字母A打头的字符串输出. 输入 第一行 n 第二行到第n+1行,每行一个字符串 输出 A打头的字符串 样例输入 3 Ada Bob Alice 样例输出 Ada Al ...

  5. 同台交换机同样VLAN能够通信,不同VLAN不可通信

    一.示意图 二.IP规划 PC0:192.168.0.100  255.255.255.0        PC1:192.168.0.110  255.255.255.0        PC2:192 ...

  6. Libgdx Box2D现实------这缓释微丸(一个:项目介绍)

    它花了两个星期的假写物理游戏,在几次课逃逸,是大学,因为大部分时间点!今天,我基本上一直每节课的点1-3有时它,哎,这似乎是不再逃跑.不知道值没有值得,仅仅是简单地想做自己喜欢的事情,而不是跟老师大眼 ...

  7. 开发一个Swing功能时的一点总结

    对JTextField进行效验,有两个途径:(1)是使用javax.swing.InputVerifier在获取焦点时进行校验(2)在点击“确定”按钮的监听事件中对控件的值进行校验 鉴于涉及的业务比较 ...

  8. CentOS-6.5-x86_64 最小化安装后,怎样安装 man 程序?

    CentOS-6.5-x86_64 最小化安装后.怎样安装man 程序? CentOS-6.5-x86_64 最小化安装后,没有man 程序,没它还真的不方便. man 是 manual(手冊)的意思 ...

  9. [原创].NET 分布式架构开发实战之一 故事起源

    原文:[原创].NET 分布式架构开发实战之一 故事起源 .NET 分布式架构开发实战之一 故事起源 前言:本系列文章主要讲述一个实实在在的项目开发的过程,主要包含:提出问题,解决问题,架构设计和各个 ...

  10. T-SQL问题解决集锦——数据加解密

    原文:T-SQL问题解决集锦--数据加解密 以下代码已经在SQLServer2008上的示例数据库测试通过 问题一:如何为数据进行加密与解密,避免使用者窃取机密数据? 对于一些敏感数据,如密码.卡号, ...