社区讨论
90pts 求助
P2189 小Z的传感器参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lo7q9l6d
- 此快照首次捕获于
- 2023/10/27 06:00 2 年前
- 此快照最后确认于
- 2023/10/27 06:00 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m,k,Q;
int tot,fir[400005],nxt[400005],son[400005];
int num[100005];bool can[100005];
queue<int>q;int fa[100005];
inline int getfa(int x){
return fa[x]==x?x:fa[x]=getfa(fa[x]);
}
void un(int x,int y){
int fax=getfa(x);
int fay=getfa(y);
if(fax!=fay)fa[fax]=fay;
}
void check(int x){
int now=1,last=0;
for(int i=1;i<=n;i++){
if(can[i])continue;
for(int j=fir[x];j;j=nxt[j]){
un(i,son[j]);
}
}
while(now<k){
bool f=false;
can[x]=false;
for(int j=fir[x];j;j=nxt[j]){
if(can[son[j]])continue;
un(x,son[j]);
}
if(fa[x]!=fa[last]&&now>1){
printf("No\n");return;
}
else{
last=x;
x=num[++now];
}
}
printf("Yes\n");
}
inline void add(int x,int y){
son[++tot]=y;nxt[tot]=fir[x];fir[x]=tot;
}
inline void read(int &x){
x=0;char c=getchar();
while(!(c<='9'&&c>='0'))c=getchar();
while(c<='9'&&c>='0'){x=(x<<1)+(x<<3)+(c^48);c=getchar();};
}
int main(){
read(n),read(m),read(k),read(Q);
for(int x,y,i=1;i<=m;i++){
read(x);read(y);
add(x,y),add(y,x);
}
while(Q--){
memset(can,0,sizeof(can));
for(int i=1;i<=n;i++)fa[i]=i;
for(int i=1;i<=k;i++){
read(num[i]);can[num[i]]=true;
}
check(num[1]);
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...