比赛 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;
}