社区讨论

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 条回复,欢迎继续交流。

正在加载回复...