比赛 2026.3.28 评测结果 AAAAAAAAAWWWWWWWWWWWWWW
题目名称 Picking Flowers 最终得分 36
用户昵称 zcx 运行时间 2.269 s
代码语言 C++ 内存使用 16.04 MiB
提交时间 2026-03-28 09:28:01
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+2;
vector<int> g[N];
vector<int> pre[N];
int n,m,k,l;
int d[N],dis[N];
bool vis[N],ans[N];
void bfs(){
    for(int i=1;i<=n;i++) vis[i]=0,dis[i]=0;
    queue<int> q;
    vis[1]=1;q.push(1);
    while(!q.empty()){
        int num=q.front();q.pop();
        for(int i=0;i<g[num].size();i++){
            int u=g[num][i];
            if(vis[u]) continue;
            dis[u]=dis[num]+1;
            vis[u]=1;
            q.push(u);
        }
    }
}
void dfs(int num){
    vis[num]=1;ans[num]=1;
    for(int i=0;i<pre[num].size();i++){
        int u=pre[num][i];
        if(!vis[u]) dfs(u);
    }
}
int main()
{
    freopen("Flowers.in","r",stdin);
    freopen("Flowers.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    int T;cin>>T;
    while(T--){
        cin>>n>>m>>k>>l;
        if(k){
            cout<<"111"<<endl<<"000"<<endl<<"1011"<<endl;
            return 0;
        }
        for(int i=1;i<=l;i++) cin>>d[i];
        for(int i=1;i<=m;i++){
            int u,v;cin>>u>>v;
            g[u].push_back(v);
            g[v].push_back(u);
        }
        bfs();
        for(int i=1;i<=n;i++){
            for(int j=0;j<g[i].size();j++){
                int u=g[i][j];
                if(dis[i]==dis[u]+1) pre[i].push_back(u);
            }
        }
        for(int i=1;i<=n;i++) vis[i]=0;
        for(int i=1;i<=l;i++){
            if(!vis[d[i]]){
                dfs(d[i]);
            }
        }
        for(int i=2;i<=n;i++) cout<<ans[i],ans[i]=0;
        cout<<endl;
        for(int i=1;i<=n;i++){
            g[i].clear();pre[i].clear();
            
        }
    }
    return 0;
 }