| 比赛 |
2026.3.28 |
评测结果 |
AWWAAAWWWWWWWWWWWWWWWWW |
| 题目名称 |
Picking Flowers |
最终得分 |
16 |
| 用户昵称 |
dbk |
运行时间 |
15.345 s |
| 代码语言 |
C++ |
内存使用 |
11.60 MiB |
| 提交时间 |
2026-03-28 12:50:24 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
int 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 <= k;i++){
int s;
cin >> s;
}
vector<int>tar(l);
for(int i = 0;i < l;i++) cin >> tar[i];
vector<vector<int> >g(n + 10);
for(int i = 0;i < m;i++){
int u, v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
if(k == 0 && l == 1){
int d = tar[0];
vector<int>dis(n + 10, -1);
queue<int>q;
dis[1] = 0;
q.push(1);
while(!q.empty()){
int u = q.front();q.pop();
for(int v : g[u]){
if(dis[v] == -1){
dis[v] = dis[u] + 1;
q.push(v);
}
}
}
vector<int>dist(n + 10, -1);
dist[d] = 0;
q.push(d);
while(!q.empty()){
int u = q.front();q.pop();
for(int v : g[u]){
if(dist[v] == -1){
dist[v] = dist[u] + 1;
q.push(v);
}
}
}
int sh = dis[d];
string ans(n - 1, '0');
for(int v = 2;v <= n;v++){
if(dis[v] != -1 && dist[v] != -1 && dis[v] + dist[v] == sh){
ans[v - 2] = '1';
}
}
cout<<ans<<endl;
}
}
}