欢迎访问~原文出处——博客园-zhouzhendong

去博客园看该题解


题目传送门 - BZOJ4997


题意概括

  在n*n的区域里,每一个1*1的块都是一个格子。

  有k头牛在里面。

  有r个篱笆把格子分开。

  如果两头牛可以不经过篱笆走到一起(过程中不能出界),那么他们就是不互相远离的,反之就是互相远离的。

  问有多少对牛是互相远离的。注意(x,y)和(y,x)算作同样的。


题解

  对于同一区域的牛,我们可以相同对待。

  所以我们dfs给各自连通的区域分开来,分别统计每一块的牛数,然后乘法原理+加法原理就可以了。


代码

#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std;
const int N=100+5;
const int dx[4]={ 0, 0,-1, 1};
const int dy[4]={-1, 1, 0, 0};
int n,m,k,r,v[N][N],cnt,tot[N*N];
bool f[N][N][4];
int find_d(int x,int y){
for (int i=0;i<4;i++)
if (x==dx[i]&&y==dy[i])
return i;
return -1;
}
void dfs(int x,int y){
if (v[x][y])
return;
v[x][y]=cnt;
for (int i=0;i<4;i++)
if (!f[x][y][i])
dfs(x+dx[i],y+dy[i]);
}
int main(){
scanf("%d%d%d",&n,&k,&r);
memset(f,0,sizeof f);
for (int i=1;i<=n;i++){
f[i][1][0]=1;
f[i][n][1]=1;
f[1][i][2]=1;
f[n][i][3]=1;
}
cnt=0;
for (int i=1;i<=r;i++){
int x_1,y_1,x_2,y_2,x,y;
scanf("%d%d%d%d",&x_1,&y_1,&x_2,&y_2);
x=x_2-x_1,y=y_2-y_1;
f[x_1][y_1][find_d(x,y)]=1;
f[x_2][y_2][find_d(-x,-y)]=1;
}
cnt=0;
memset(v,0,sizeof v);
memset(tot,0,sizeof tot);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (!v[i][j]){
cnt++;
dfs(i,j);
}
for (int i=1,x,y;i<=k;i++){
scanf("%d%d",&x,&y);
tot[v[x][y]]++;
}
m=cnt;
int sum=0,ans=0;
for (int i=1;i<=m;i++)
sum+=tot[i];
for (int i=1;i<=m;i++){
sum-=tot[i];
ans+=tot[i]*sum;
}
printf("%d",ans);
return 0;
}

  

BZOJ4997 [Usaco2017 Feb]Why Did the Cow Cross the Road III的更多相关文章

  1. BZOJ4994 [Usaco2017 Feb]Why Did the Cow Cross the Road III 树状数组

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4994 题意概括 给定长度为2N的序列,1~N各处现过2次,i第一次出现位置记为ai,第二次记为bi ...

  2. 【bzoj4994】[Usaco2017 Feb]Why Did the Cow Cross the Road III 树状数组

    题目描述 给定长度为2N的序列,1~N各处现过2次,i第一次出现位置记为ai,第二次记为bi,求满足ai<aj<bi<bj的对数 样例输入 4 3 2 4 4 1 3 2 1 样例输 ...

  3. [BZOJ4994] [Usaco2017 Feb]Why Did the Cow Cross the Road III(树状数组)

    传送门 1.每个数的左右位置预处理出来,按照左端点排序,因为左端点是从小到大的,我们只需要知道每条线段包含了多少个前面线段的右端点即可,可以用树状数组 2.如果 ai < bj < bi, ...

  4. [Usaco2017 Feb]Why Did the Cow Cross the Road III (Gold)

    Description 给定长度为2N的序列,1~N各处现过2次,i第一次出现位置记为ai,第二次记为bi,求满足ai < aj < bi < bj的对数 Sample Input ...

  5. bzoj 4991 [Usaco2017 Feb]Why Did the Cow Cross the Road III(cdq分治,树状数组)

    题目描述 Farmer John is continuing to ponder the issue of cows crossing the road through his farm, intro ...

  6. bzoj 4994: [Usaco2017 Feb]Why Did the Cow Cross the Road III 树状数组_排序

    Description 给定长度为2N的序列,1~N各处现过2次,i第一次出现位置记为ai,第二次记为bi,求满足ai<aj<bi<bj的对数 题解: 方法一: 搞一个KDtree, ...

  7. 4990: [Usaco2017 Feb]Why Did the Cow Cross the Road II 线段树维护dp

    题目 4990: [Usaco2017 Feb]Why Did the Cow Cross the Road II 链接 http://www.lydsy.com/JudgeOnline/proble ...

  8. 4989: [Usaco2017 Feb]Why Did the Cow Cross the Road

    题面:4989: [Usaco2017 Feb]Why Did the Cow Cross the Road 连接 http://www.lydsy.com/JudgeOnline/problem.p ...

  9. [BZOJ4990][Usaco2017 Feb]Why Did the Cow Cross the Road II dp

    4990: [Usaco2017 Feb]Why Did the Cow Cross the Road II Time Limit: 10 Sec  Memory Limit: 128 MBSubmi ...

随机推荐

  1. 网站程序CMS识别

    CMS cms一般有dedecms(织梦),dzcms,phpweb,phpwind,phpcms,ecshop,dvbbs,siteweaver,aspcms,帝国,zblog,wordpress等 ...

  2. [CQOI2018]交错序列 (矩阵快速幂,数论)

    [CQOI2018]交错序列 \(solution:\) 这一题出得真的很好,将原本一道矩阵快速幂硬生生加入组合数的标签,还那么没有违和感,那么让人看不出来.所以做这道题必须先知道(矩阵快速幂及如何构 ...

  3. Pandas提取数据存入excel

    import pandas as pd import pymysql def connect_db(): MYSQL_HOSTS = '127.0.0.1' MYSQL_USER = 'root' M ...

  4. 3、输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。

    题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 思路: 利用栈“先进后出”的性质,将链表的值存入到栈里,然后将栈里的值存入到构建好的容器里,最后打印容器. class So ...

  5. UML 类图 说明

    继承关系用空心三角形+实线来表示 关联:就是属性 聚合: 合成:组成 依赖:作为参数存在

  6. IMU 预积分推导

    给 StereoDSO 加 IMU,想直接用 OKVIS 的代码,但是有点看不懂.知乎上郑帆写的文章<四元数矩阵与 so(3) 左右雅可比>提到 OKVIS 的预积分是使用四元数,而预积分 ...

  7. 2017-2018-2 20155303『网络对抗技术』Exp4:恶意代码分析

    2017-2018-2 20155303『网络对抗技术』Exp4:恶意代码分析 --------CONTENTS-------- 一.原理与实践说明 1.实践目标 2.实践内容概述 3.基础问题回答 ...

  8. POI读取Excel(xls、xlsx均可以)——(四)

    maven构建的项目-->pom.xml文件 eclipse提供Dependencies直接添加依赖jar包的工具:直接搜索poi以及poi-ooxml即可,maven会自动依赖需要的jar包: ...

  9. ditto复制增强

    1.下载 http://ditto-cp.sourceforge.net/ 2.用法   ctrl+` ctrl+数字 或者  ctrl +`  然后用鼠标选择 soeasy

  10. 安装python3后使用pip和pip3的区别是什么?

    安装python3后使用pip和pip3的区别是什么? 1.其实这两个命令效果是一样的,没有区别: (1)比如安装库numpy,pip3  install  numpy或者pip  install   ...