| 比赛 |
2026.3.28 |
评测结果 |
AAWTTETTTTETTTTTTTTTTTT |
| 题目名称 |
Picking Flowers |
最终得分 |
8 |
| 用户昵称 |
张雨晴 |
运行时间 |
39.697 s |
| 代码语言 |
C++ |
内存使用 |
141.67 MiB |
| 提交时间 |
2026-03-28 11:25:04 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int t;
const int M=500005;
int s[M];
int d[M];
int b[M];
int ans[M];
int step[M];
int h[M],to[M],nxt[M],cnt;
void add(int u,int v){
to[++cnt]=v;
nxt[cnt]=h[u];
h[u]=cnt;
}
void bfs1(int st){
memset(b,0,sizeof(b));
queue<int>q;
q.push(st);
while(!q.empty()){
int u=q.front();
q.pop();
if(b[u]) continue;
b[u]=1;
for(int i=h[u];i;i=nxt[i]){
int v=to[i];
if(b[v]) continue;
step[v]=step[u]+1;
q.push(v);
}
}
}
void bfs2(int st){
memset(b,0,sizeof(b));
queue<int>q;
q.push(st);
while(!q.empty()){
int u=q.front();
q.pop();
if(b[u]) continue;
b[u]=1;
for(int i=h[u];i;i=nxt[i]){
int v=to[i];
if(b[v]) continue;
if(step[v]!=step[u]-1) continue;
ans[v]=1;
q.push(v);
}
}
}
int main(){
freopen("Flowers.in","r",stdin);
freopen("Flowers.out","w",stdout);
cin>>t;
while(t--){
int n,m,k,l;
cin>>n>>m>>k>>l;
for(int i=1;i<=k;i++){
cin>>s[i];
}
for(int i=1;i<=l;i++){
cin>>d[i];
ans[d[i]]=1;
}
ans[1]=1;
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
add(u,v);
add(v,u);
}
bfs1(1);
// for(int i=1;i<=n;i++) cout<<step[i]<<" ";
// cout<<"\n";
for(int i=1;i<=l;i++){
bfs2(d[i]);
}
for(int i=2;i<=n;i++){
// cout<<i<<" ";
if(ans[i]){
cout<<1;
}else{
cout<<0;
}
// cout<<"\n";
}
cout<<"\n";
}
return 0;
}