BZOJ 4997 [Usaco2017 Feb]Why Did the Cow Cross the Road III
本来想做一道搜索
最后发现是一道并查集的水题
如果两个邻格之间没有路
就把他们合并就行了
#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相关推荐
- bzoj 4997: [Usaco2017 Feb]Why Did the Cow Cross the Road III(Pu1 2018.10.1)
算法:dfs,连通块 难度:NOIP 题解:搜索出每个连通块,找到每个连通块里有几头牛.然后每个连通块内牛数量相乘,求和即为正解 不清楚luogu题解中的代码明明MLE了,却还能AC??? 代码如下: ...
- bzoj 4997: [Usaco2017 Feb]Why Did the Cow Cross the Road III
题意: 给你一个n*n的地图 某对相邻的点中间有墙. 然后给你n个坐标,问你有多少对坐标不可以互相到达. 题解: 至今为止,提交记录就只有1个WA的-- 随便暴力做一下就好了.
- 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编号调了好久 ...
- [BZOJ4994] [Usaco2017 Feb]Why Did the Cow Cross the Road III(树状数组)
传送门 1.每个数的左右位置预处理出来,按照左端点排序,因为左端点是从小到大的,我们只需要知道每条线段包含了多少个前面线段的右端点即可,可以用树状数组 2.如果 ai < bj < bi, ...
- 【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 样例输 ...
- BZOJ4997 [Usaco2017 Feb]Why Did the Cow Cross the Road III
欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4997 题意概括 在n*n的区域里,每一个1*1的块都是一个格子. 有k头牛在里面. 有r个篱笆把格 ...
- bzoj4997 [Usaco2017 Feb]Why Did the Cow Cross the Road III(bfs)
枚举每一个起点,bfs能访问到几头牛即可.复杂度O(n3)O(n^3) #include <cstdio> #include <cstring> #include <al ...
- bzoj4997: [Usaco2017 Feb]Why Did the Cow Cross the Road III
题意 给你一个n*n的地图 一开始两个相邻的点是有边的的 然后告诉你,某对相邻的点没有边了 然后给你n个坐标,问你有多少对坐标不可以互相到达 题解 随便暴力做一下就好了 至今为止,提交记录就只有1个W ...
- 【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 ...
最新文章
- Uva - 12545 - Bits Equalizer
- 再学 GDI+[25]: TGPPen - 宽度、颜色与线帽
- itoa函数的递归实现(二级指针实现)
- 在Android Studio中打开Android Device Monitor时报错的解决方法
- go语言使用redis —— redigo
- 【Python】WindowsError的错误代码详解
- SAP Spartacus的PWA支持
- 以管理员权限运行程序需注意
- oracle锁和kill session
- Condition梳理和总结
- java程序设计pdf下载_Java程序设计基础(第5版) PDF 下载
- mac中使用QuickTime Player看了移动硬盘里的视频,如何清除记录?
- 前端主流框架双向绑定实现原理简述
- C++、MFC往Word模板中添加图片
- iPhone7 plus分辨率行不行
- ubuntu中/usr目录下无法直接复制粘贴文件或目录
- 计算机留言板毕业论文摘要,终于知道毕业论文摘要怎么写了?赶紧收藏吧!
- 肖特基二极管与普通二极管的区别
- 抓取微信群聊人数,并保存到excel表格
- 用户控制 阻止运行程序_阻止或允许您的孩子通过家长控制使用的程序
热门文章
- Redis Scan 命令
- ftp文件服务器杀毒,FTP远程查杀网页木马方法
- 用计算机弹奏曲子童年,5.这首曲子使我想起了我的童年.十.书面表达现在.计算机游戏非常盛行.这是一件好事还是一件坏事?请你用英语写一篇短文来陈述自己的观点.并说明理由.字数:80-120....
- datagridview取消默认选中_winform datagridview中的 combobox如何选中默认值?
- c语言爱心代码空心,c语言心形图案代码,是什么?
- 服务器无法在发送 http 标头之后设置内容类型。_python socket编程预知内容
- 局域网共享工具_局域网文件共享
- 今日头条ocpm计费规则_入门篇|信息流广告的游戏规则—竞价机制
- python电影推荐系统的设计与实现_一种电影推荐系统的设计与实现
- Java一些基础知识的整合