[JZOJ 5875] [NOIP2018提高组模拟9.20] 听我说,海蜗牛 解题报告(BFS+二分)
题目链接:
http://172.16.0.132/senior/#main/show/5875
题目:

题解:
注意这题只能经过开放的港口
我们考虑用vector存下每个点不能到的点,并把并让vector里面的元素升序排序,这样我们就可以二分查找一个点是否与另外一个点相连
接下来我们对于每一个开放的港口bfs,每次bfs都把属于这个连通块的港口去掉
考虑开两个队列来bfs,队列1存储的是当前连通块里还没有拓展的点,队列2里存储的是还剩下的点,看看代码就可以理解了
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<iostream>
#include<vector>
#include<queue>
using namespace std; const int N=1e5+;
int n,m,t;
struct E{
int x,y;
}e[N<<];
vector <int> p[N];
queue <int> Q;
inline int read(){
char ch=getchar();int s=,f=;
while (ch<''||ch>'') {if (ch=='-') f=-;ch=getchar();}
while (ch>=''&&ch<='') {s=(s<<)+(s<<)+ch-'';ch=getchar();}
return s*f;
}
bool cmp(E a,E b){return a.x<b.x||(a.x==b.x&&a.y<b.y);}
int find(int u,int v){
int l=,r=p[u].size()-;
if (l>r) return -;
while (l<=r){
if (l==r) return p[u][l];
int mid=l+r>>;
if (p[u][mid]>v) r=mid-;else
if (p[u][mid]<v) l=mid+;else
if (p[u][mid]==v) return p[u][mid];
}
return p[u][l];
}
void bfs(int x){
queue <int> qq,q;
qq.push(x);
while (!qq.empty())
{
int u=qq.front();qq.pop();
while (!Q.empty()){
int v=Q.front();Q.pop();
if (find(u,v)!=v) qq.push(v);
else q.push(v);
}
while (!q.empty()){
int v=q.front();q.pop();
Q.push(v);
}
}
}
int main(){
freopen("connect.in","r",stdin);
freopen("connect.out","w",stdout);
n=read();m=read();t=read();
int cnt=;
for (int i=;i<=m;i++){
++cnt;
e[cnt].x=read();e[cnt].y=read();
++cnt;
e[cnt].x=e[cnt-].y;e[cnt].y=e[cnt-].x;
}
sort(e+,e++cnt,cmp);
for (int i=;i<=cnt;i++) p[e[i].x].push_back(e[i].y);
while (t--){
int k=read(),ans=;
while (!Q.empty()) Q.pop();
for (int i=;i<=k;i++){
int s=read();
Q.push(s);
}
while (!Q.empty()){
int s=Q.front();Q.pop();
bfs(s);++ans;
}
printf("%d\n",ans);
}
return ;
}
[JZOJ 5875] [NOIP2018提高组模拟9.20] 听我说,海蜗牛 解题报告(BFS+二分)的更多相关文章
- [jzoj 5178] [NOIP2017提高组模拟6.28] So many prefix? 解题报告(KMP+DP)
题目链接: https://jzoj.net/senior/#main/show/5178 题目: 题解: 我们定义$f[pos]$表示以位置pos为后缀的字符串对答案的贡献,答案就是$\sum_{i ...
- [JZOJ 5852] [NOIP2018提高组模拟9.6] 相交 解题报告 (倍增+LCA)
题目链接: http://172.16.0.132/senior/#main/show/5852 题目: 题目大意: 多组询问,每次询问树上两条链是否相交 题解: 两条链相交并且仅当某一条链的两个端点 ...
- NOIP2018提高组模拟题(五)
字符串(string) Description 小林与亮亮正在做一个游戏.小林随意地写出一个字符串,字符串只由大写 字母组成,然后指定一个非负整数 m,亮亮可以进行至多 m 次操作,每次操作 为交换相 ...
- 2019.6.21 NOIP2018提高组模拟题(二)
1.咒语 (curse.pas/c/cpp) [题目描述] 亮亮梦到自己来到了魔法城堡,但一扇巨大的石门阻拦了他通向城堡内的路.正当他沮丧之际,突然发现门上有一处机关,机关上有一张很长的纸条.亮亮拿起 ...
- NOIP2018提高组模拟题(六)
购物(shop) Description 小林来到商店中进行购物.商店里一共有 n 件物品,第 i 件物品的价格为 a[i] 元.小林总共需要购买 m 件物品,他希望他所花费的钱最少,请你计算出最小 ...
- 10.18 NOIP2018提高组模拟题(二)
大水题 1.咒语 (curse.pas/c/cpp) [题目描述] 亮亮梦到自己来到了魔法城堡,但一扇巨大的石门阻拦了他通向城堡内的路.正当他沮丧之际,突然发现门上有一处机关,机关上有一张很长的纸条. ...
- [jzoj 5177] [NOIP2017提高组模拟6.28] TRAVEL 解题报告 (二分)
题目链接: https://jzoj.net/senior/#main/show/5177 题目: 题解: 首先选出的泡泡怪一定是连续的一段 L,R 然后 L 一定属于虫洞左边界中的某一个 R 也同样 ...
- jzoj5879. 【NOIP2018提高组模拟9.22】电路图 B
tj:一道好題 看區間操作可以想到線段樹 並聯操作公式:a1∗a2/(a1+a2)a1*a2/(a1+a2)a1∗a2/(a1+a2) 串聯操作公式:a1+a2a1+a2a1+a2 我們發現,一個區間 ...
- NOIP2018提高组模拟题(四)
能量(energy) Description 有一块能量田,它的形状是 n*m的矩形,每一个格子上都有一个能量值 a[x][y] (可正可负).一块矩形田的能量定义为它的每个格子的能量值之和. ...
随机推荐
- angularjs1-4 事件指令
<div ng-app="myApp"> <div ng-controller="firstController"> <div n ...
- Swift EventKit的初学者指南–请求权限
EventKit为获取和操作用户日历事件和提醒提供了一系列的类.在下面的教程中,我的目标是带领你走出利用EventKit建立一个应用程序的第.我的目标是带领你迈出利用EventKit建立一个应用程序的 ...
- USACO 2.1 Hamming Codes
Hamming CodesRob Kolstad Given N, B, and D: Find a set of N codewords (1 <= N <= 64), each of ...
- HD-ACM算法专攻系列(21)——Wooden Sticks
题目描述: AC源码: 此题考查贪心算法,解题思路:首先使用快速排序,以w或l按升序排序(注意相等时,应按另一值升序排序),这样就将二维变量比较,变为了一维的,排好序的一边就不需要去管了,只需要对未排 ...
- 互联网智能门锁,手机蓝牙APP成为首选
随着互联网门锁在行业中的普及,大家越加关注到门锁的实施和维护成本.我们在互联网智能门锁的调研中发现,网关联网的智能门锁,使用时需要依赖房间内的宽带上网线路,而断线后客户反馈问题较多.据某家分散式公寓的 ...
- Use gdb attach pid and debug it
- js 正则表达式 整合
正则表达式:断言 取字符串区间: /(?<=["+ star +"]).*(?=["+ end +"])/ // 简单封装 Vue.prototype.s ...
- EXGSBS模板
EXBSGS模板 我之前把有一处b和c弄反了,有点困...然后调了半天 (exbsgs比excrt简单多了) 求x的最小正整数解 原式子拆成 在bsgs中,保证a,b互质,这样求出的逆元挪过去才对 但 ...
- [luogu1772 ZJOI2006] 物流运输 (最短路 线性dp)
题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪. ...
- pycharm 2018 3.4 for mac破解
使用pycharm的小伙伴都知道,pycharm分为社区版和专业版,这里具体区别不作过多介绍.本文带大家安装mac版的2018 pycharm 3.4 1.去官网下载pycharm 3.4 for m ...