题解 洛谷P2189 【小Z的传感器】
时间:2019-12-22
本文章向大家介绍题解 洛谷P2189 【小Z的传感器】,主要包括题解 洛谷P2189 【小Z的传感器】使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
这题就是考察什么时候建边,貌似和搜索没有半毛钱关系\(qwq\)
首先没有传感器的房间是可以随便走来走去的,因为我们不用考虑顺序。于是就考虑先把这些点的相互的边给建起来。
接下来分析一波,对于第\(i\)个得到信息的房间,我们绝对不能在此之前经过第\(i+1\) ~ \(k\)的房间。所以,除了这些房间,我们将其余所有连边,再判断第\(i-1\)个房间能否到\(i\)房间即可。
因为只要判断房间之间的连通性,用冰茶机来维护是再好不过了。
\(Code:\)
#include<bits/stdc++.h>
using namespace std;
inline int read(){
register int s=0,f=1;
register char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f*=-1;ch=getchar();}
while(isdigit(ch))s=(s<<1)+(s<<3)+(ch^48),ch=getchar();
return s*f;
}
const int max_n=100000+5;
int a[max_n],par[max_n],vis[max_n];//par表示祖先,vis表示哪些点可以连
vector<int>Next[max_n];
int find(int x){
if(x==par[x])return x;//找到祖先
return par[x]=find(par[x]);//路径压缩
}
void merge(int x,int y){
x=find(x),y=find(y);//找祖先
if(x==y)return;//同一个祖先?大雾
par[y]=x;
}
void add(int x){//找所有和x联通并可以连边的点
for(int i=0;i<Next[x].size();i++){
if(vis[Next[x][i]]==0)merge(x,Next[x][i]);//可以连就连
}
}
int main(){
int n=read(),m=read(),k=read(),T=read();
while(m--){
int x=read(),y=read();
Next[x].push_back(y);
Next[y].push_back(x);
}
while(T--){
for(int i=1;i<=n;i++)par[i]=i;//冰茶机的初始化qwq
for(int i=1;i<=k;i++){
a[i]=read(),vis[a[i]]=1;//标记这个点不能连
}
for(int i=1;i<=n;i++){
if(vis[i]==0)add(i);
}
vis[a[1]]=0,add(a[1]);
for(int i=2;i<=k;i++){
vis[a[i]]=0,add(a[i]);//连上这个点
if(find(a[i])!=find(a[i-1])){puts("No");break;}//连不同就凉了
if(i==k)puts("Yes");
}
}
return 0;
}
于是\(50\)行就切掉了这道紫题真香
原文地址:https://www.cnblogs.com/Agonim/p/12080809.html
- springboot的Web开发-Web相关配置
- Centos7下yum安装配置nginx与php
- CentOS7安装MySQL
- 分布式系统唯一ID生成方案汇总
- 操作系统底层技术——CPU亲和性
- AngularJS例子 ng-repeat遍历输出 通过js的splice方法删除当前行
- mongoDB报错Cannot find module '../build/Release/bson'
- 计算机视觉处理三大任务:分类、定位和检测
- Windows下RabbitMQ安装及入门
- 计算机视觉任务:图像梯度和图像完成
- Yarn【label-based scheduling】实战总结(一)
- 配置sonarqube+maven
- Yarn【label-based scheduling】实战总结(二)
- HDFS学习:HDFS机架感知与副本放置策略
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法