| 比赛 |
2026.3.28 |
评测结果 |
AAETTETAAEETETEEETTTTWE |
| 题目名称 |
Picking Flowers |
最终得分 |
16 |
| 用户昵称 |
exil |
运行时间 |
26.616 s |
| 代码语言 |
C++ |
内存使用 |
231.58 MiB |
| 提交时间 |
2026-03-28 11:15:18 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define int long long
vector<int> v[200005];
vector<int> dis[200005];
int mu[200005];
int pan[200005];
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;
void dsl(){
dis[1][0]=0;
q.push({0,1});
while(!q.empty()){
int dian=q.top().second;
int bian=q.top().first;
q.pop();
for(int i = 0;i<v[dian].size();i++){
if(dis[v[dian][i]][0]>bian+1){
dis[v[dian][i]].clear();
dis[v[dian][i]].push_back(bian+1);
dis[v[dian][i]].push_back(dian);
q.push({bian+1,v[dian][i]});
}
else if(dis[v[dian][i]][0]==bian+1){
dis[v[dian][i]].push_back(dian);
q.push({bian+1,v[dian][i]});
}
}
}
}
signed main(){
freopen("Flowers.in","r",stdin);
freopen("Flowers.out","w",stdout);
int T;
cin>>T;
while(T--){
int n,m,k,l;
cin>>n>>m>>k>>l;
for(int i = 1;i<=n;i++){
v[i].clear();
dis[i].clear();
pan[i]=0;
}
queue<int> qq;
for(int i = 1;i<=l;i++){
cin>>mu[i];
qq.push(mu[i]);
}
for(int i = 1;i<=m;i++){
int u,vi;
cin>>u>>vi;
v[u].push_back(vi);
v[vi].push_back(u);
}
for(int i = 1;i<=n;i++)dis[i].push_back(INT_MAX);
dsl();
while(!qq.empty()){
pan[qq.front()]=1;
//cout<<qq.front()<<" ";
for(int i = 1;i<dis[qq.front()].size();i++){
qq.push(dis[qq.front()][i]);
}
qq.pop();
}
// for(int i = 1;i<=n;i++){
// cout<<dis[i].size()<<endl;
// for(int j = 1;j<dis[i].size();j++)cout<<dis[i][j]<<" ";
// cout<<endl;
// }
for(int i = 2;i<=n;i++){
cout<<pan[i];
}
cout<<endl;
}
return 0;
}