本来想做一道搜索

最后发现是一道并查集的水题

如果两个邻格之间没有路

就把他们合并就行了

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN=105;
const int MAXM=20005;
inline int read(){int x=0,f=1,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;
}
int f[MAXM];
inline int find(int x){return f[x]=(f[x]==x)?f[x]:find(f[x]);
}
inline bool same(int x,int y){return find(x)==find(y);
}
inline void add(int x,int y){f[find(x)]=find(y);
}
int a[MAXN][MAXN];
int b[MAXN][MAXN];
int siz[MAXM];
int q[MAXM],tail;
int main(){int n=read(),k=read(),r=read();for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)f[i*n+j]=i*n+j;for(int i=1;i<=r;i++){int r1=read(),c1=read(),r2=read(),c2=read();if(r1==r2+1) a[r2][c1]=1;if(r2==r1+1) a[r1][c1]=1;if(c1==c2+1) b[r1][c2]=1;if(c2==c1+1) b[r1][c1]=1;}for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){if(!a[i][j]&&i<n) add(i*n+j,i*n+j+n);if(!b[i][j]&&j<n) add(i*n+j,i*n+j+1);}for(int i=1;i<=k;i++){int r=read(),c=read();if(!siz[find(r*n+c)]) q[++tail]=find(r*n+c);siz[find(r*n+c)]++;}int ans=0;// cout<<tail<<endl;for(int i=1;i<=tail;i++) ans+=siz[q[i]]*(k-siz[q[i]]),k-=siz[q[i]];printf("%d\n",ans);return 0;
}

  

转载于:https://www.cnblogs.com/gcyyzf/p/9850190.html

BZOJ 4997 [Usaco2017 Feb]Why Did the Cow Cross the Road III相关推荐

  1. bzoj 4997: [Usaco2017 Feb]Why Did the Cow Cross the Road III(Pu1 2018.10.1)

    算法:dfs,连通块 难度:NOIP 题解:搜索出每个连通块,找到每个连通块里有几头牛.然后每个连通块内牛数量相乘,求和即为正解 不清楚luogu题解中的代码明明MLE了,却还能AC??? 代码如下: ...

  2. bzoj 4997: [Usaco2017 Feb]Why Did the Cow Cross the Road III

    题意: 给你一个n*n的地图 某对相邻的点中间有墙. 然后给你n个坐标,问你有多少对坐标不可以互相到达. 题解: 至今为止,提交记录就只有1个WA的-- 随便暴力做一下就好了.

  3. BZOJ 4992: [Usaco2017 Feb]Why Did the Cow Cross the Road

    题意很简单,不说了. 这题思路其实挺简单,把每个格编号为i,3*i走到3*j+1,3*i+1走到3*j+2,以此类推,注意一下边权是多少就好了. 然而一开始用分层图的普遍套路i+j*n*n编号调了好久 ...

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

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

  5. 【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 样例输 ...

  6. BZOJ4997 [Usaco2017 Feb]Why Did the Cow Cross the Road III

    欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4997 题意概括 在n*n的区域里,每一个1*1的块都是一个格子. 有k头牛在里面. 有r个篱笆把格 ...

  7. bzoj4997 [Usaco2017 Feb]Why Did the Cow Cross the Road III(bfs)

    枚举每一个起点,bfs能访问到几头牛即可.复杂度O(n3)O(n^3) #include <cstdio> #include <cstring> #include <al ...

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

    题意 给你一个n*n的地图 一开始两个相邻的点是有边的的 然后告诉你,某对相邻的点没有边了 然后给你n个坐标,问你有多少对坐标不可以互相到达 题解 随便暴力做一下就好了 至今为止,提交记录就只有1个W ...

  9. 【bzoj4992: [Usaco2017 Feb]Why Did the Cow Cross the Road】动规

    4992: [Usaco2017 Feb]Why Did the Cow Cross the Road Time Limit: 10 Sec   Memory Limit: 256 MB Submit ...

最新文章

  1. Uva - 12545 - Bits Equalizer
  2. 再学 GDI+[25]: TGPPen - 宽度、颜色与线帽
  3. itoa函数的递归实现(二级指针实现)
  4. 在Android Studio中打开Android Device Monitor时报错的解决方法
  5. go语言使用redis —— redigo
  6. 【Python】WindowsError的错误代码详解
  7. SAP Spartacus的PWA支持
  8. 以管理员权限运行程序需注意
  9. oracle锁和kill session
  10. Condition梳理和总结
  11. java程序设计pdf下载_Java程序设计基础(第5版) PDF 下载
  12. mac中使用QuickTime Player看了移动硬盘里的视频,如何清除记录?
  13. 前端主流框架双向绑定实现原理简述
  14. C++、MFC往Word模板中添加图片
  15. iPhone7 plus分辨率行不行
  16. ubuntu中/usr目录下无法直接复制粘贴文件或目录
  17. 计算机留言板毕业论文摘要,终于知道毕业论文摘要怎么写了?赶紧收藏吧!
  18. 肖特基二极管与普通二极管的区别
  19. 抓取微信群聊人数,并保存到excel表格
  20. 用户控制 阻止运行程序_阻止或允许您的孩子通过家长控制使用的程序

热门文章

  1. Redis Scan 命令
  2. ftp文件服务器杀毒,FTP远程查杀网页木马方法
  3. 用计算机弹奏曲子童年,5.这首曲子使我想起了我的童年.十.书面表达现在.计算机游戏非常盛行.这是一件好事还是一件坏事?请你用英语写一篇短文来陈述自己的观点.并说明理由.字数:80-120....
  4. datagridview取消默认选中_winform datagridview中的 combobox如何选中默认值?
  5. c语言爱心代码空心,c语言心形图案代码,是什么?
  6. 服务器无法在发送 http 标头之后设置内容类型。_python socket编程预知内容
  7. 局域网共享工具_局域网文件共享
  8. 今日头条ocpm计费规则_入门篇|信息流广告的游戏规则—竞价机制
  9. python电影推荐系统的设计与实现_一种电影推荐系统的设计与实现
  10. Java一些基础知识的整合