2150: 部落战争

题目:传送门


题解:

   辣鸡数据..毁我AC率

   先说做法,很容易就可以看出是二分图匹配的最小路径覆盖(可能是之前不久刚做过类似的题)

   一开始还傻逼逼的去直接连边然后准备跑floyd...肯定是做祭祀做傻了

   二分图嘛,将每个点拆成两个集合再连啊...

   然后最小路径覆盖=总点数-最大匹配数

   强烈吐槽!个人习惯用数组存点编号...50*50的数据范围我开55*55...结果WA n次

   然后...改成56*56...AC。。。ORZ

  


代码:

 #include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
struct node
{
int x,y,next;
}a[];int len,last[];
void ins(int x,int y)
{
len++;a[len].x=x;a[len].y=y;
a[len].next=last[x];last[x]=len;
}
char s[][];
int n,m,R,C,t;
int match[],chw[];
bool findmuniu(int x)
{
for(int k=last[x];k;k=a[k].next)
{
int y=a[k].y;
if(chw[y]!=t)
{
chw[y]=t;
if(match[y]== || findmuniu(match[y]))
{
match[y]=x;
return true;
}
}
}
return false;
}
int d[][];//辣鸡数据
int main()
{
scanf("%d%d%d%d",&n,&m,&R,&C);
for(int i=;i<=n;i++)scanf("%s",s[i]+);
int ss=;memset(d,-,sizeof(d));
for(int i=;i<=n;i++)for(int j=;j<=m;j++)d[i][j]=++ss;
const int dx[]={,R,R,C,C};
const int dy[]={,-C,C,-R,R};
int sum=;len=;memset(last,,sizeof(last));
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(s[i][j]=='.')
{
sum++;
for(int k=;k<=;k++)
{
int x=i+dx[k],y=j+dy[k];
if(d[x][y]!=- && s[x][y]!='x')
ins(d[i][j],d[x][y]+n*m);
}
}
memset(match,,sizeof(match));
memset(chw,,sizeof(chw));
int ans=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(s[i][j]=='.')
{
t++;
if(findmuniu(d[i][j]))ans++;
}
printf("%d\n",sum-ans);
return ;
}

bzoj2150: 部落战争(匈牙利)的更多相关文章

  1. [bzoj2150]部落战争_二分图最小路径覆盖

    部落战争 bzoj-2150 题目大意:题目链接. 注释:略. 想法: 显然是最小路径覆盖,我们知道:二分图最小路径覆盖等于节点总数-最大匹配. 所以我们用匈牙利或者dinic跑出最大匹配,然后用总结 ...

  2. BZOJ2150: 部落战争

    题解: 把每个点拆成入点和出点,因为必须经过一次且只能经过一次.所以在两个点之间连一条上界=下界=1的边. 然后再s到每个入点连边,每个出点向t连边,点与点之间... 求最小流就可以过了... (感觉 ...

  3. BZOJ-2150部落战争(最小路径覆盖)

    2150: 部落战争 Time Limit: 10 Sec  Memory Limit: 259 MB Description lanzerb的部落在A国的上部,他们不满天寒地冻的环境,于是准备向A国 ...

  4. BZOJ2150部落战争——最小路径覆盖

    题目描述 lanzerb的部落在A国的上部,他们不满天寒地冻的环境,于是准备向A国的下部征战来获得更大的领土. A国是一 个M*N的矩阵,其中某些地方是城镇,某些地方是高山深涧无人居住.lanzerb ...

  5. BZOJ2150 部落战争 【带上下界最小流】

    题目链接 BZOJ2150 题解 复习: 带上下界网络流两种写法: 不建\(T->S\)的\(INF\)的边,即不考虑源汇点,先求出此时超级源汇的最大流,即无源汇下最大的自我调整,再加入该边,求 ...

  6. 【最小路径覆盖】【二分图】【最大流】【Dinic】bzoj2150 部落战争

    裸的最小路径覆盖. 把每个点拆点,变成二分图. 对于可以连边的点对(i,j):i->j'(1); 对于任意一点i,若i点为'.':S->i(1),i'->T(1); 答案为所有'.' ...

  7. 【BZOJ2150】部落战争 最小流

    [BZOJ2150]部落战争 Description lanzerb的部落在A国的上部,他们不满天寒地冻的环境,于是准备向A国的下部征战来获得更大的领土. A国是一个M*N的矩阵,其中某些地方是城镇, ...

  8. BZOJ 2150: 部落战争 最大流

    2150: 部落战争 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php? ...

  9. 【BZOJ5317】[JSOI2018]部落战争(凸包,闵可夫斯基和)

    [BZOJ5317][JSOI2018]部落战争(凸包,闵可夫斯基和) 题面 BZOJ 洛谷 题解 很明显我们只需要两个凸包\(A,B\). 假设询问给定的方向向量是\(v\). 那么现在就是判断\( ...

随机推荐

  1. linux:共享内存

    #include <sys/ipc.h> #include <sys/shm.h> #include <string.h> #include <stdio.h ...

  2. 【Java集合源代码剖析】LinkedList源代码剖析

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/35787253 您好.我正在參加CSDN博文大赛.假设您喜欢我的文章,希望您能帮我投一票,谢 ...

  3. (转)c++ typedef 函数指针详细说明

    转自:http://blog.csdn.net/future200x/article/details/5350134 一个函数在编译时被分配一个入口地址,将这个入口地址称为函数的指针,可以用一个指针变 ...

  4. Adding Kentico controls to the Visual Studio toolbox

    https://docs.kentico.com/k10/references/kentico-controls https://docs.kentico.com/k10/references/ken ...

  5. http server优雅启停原理及验证

    问题背景 在 http应用程序重启时,如果直接 kill -9 使程序退出,然后再启动,会存在的问题: 旧的请求未处理完,如果服务端进程直接退出,会造成客户端连接中断(收到 RST) 新请求打过来,服 ...

  6. 1.Win32基本程序概念

    还没学会走之前,不要跑! Message based , event driven 每个程序都应该有一个如下的循环:MSG msg;while(GetMessage(&msg,NULL,NUL ...

  7. Comparable与Comparator区别(实现和使用)

    一.Comparable接口 1.Comparable接口是什么? 此接口强行对实现它的每个类的对象进行整体排序.此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 . ...

  8. Android Studio 插件 GsonFormat :你还在烦恼 为 Json格式 生成 JavaBean实体类吗?

    在网络层,互联网提供所有应用程序都要使用的两种类型的服务,尽管目前理解这些服务的细节并不重要,但在所有TCP/IP概述中,都不能忽略他们: 无连接分组交付服务(Connectionless Packe ...

  9. Apache-TomCat安装配置

    Apache-TomCat安装配置 本文是免安装版的Tomcat!(安装JavaJDK的步骤就不多述了!) (1)官网下载地址:https://tomcat.apache.org/download-8 ...

  10. <错误>

    1. package com.multak.cookaraclient.adapter; import android.content.Context; import android.support. ...