#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <iomanip>
using namespace std;
typedef long long ll;
const ll INF = 1e14;
vector<int> adj[50002];
int x[50002];
int n, m, k;
vector<ll> shortest_path(int s, vector<int> dont) {
queue<int> q;
vector<ll> d(n);
q.push(s);
for(int i=0;i<n;i++) d[i] = INF;
d[s] = 0;
while(!q.empty()) {
int now = q.front(); q.pop();
if(dont[now] && now != s) continue;
for(int nxt : adj[now]) {
if(d[nxt] > d[now] + 1) {
d[nxt] = d[now] + 1;
q.push(nxt);
}
}
}
return d;
}
vector<ll> next_stop(string s) {
queue<int> q;
vector<ll> d(n);
for(int i=0;i<n;i++) {
if(s[i] == '0') d[i] = INF;
else q.push(i);
}
while(!q.empty()) {
int now = q.front(); q.pop();
for(int nxt : adj[now]) {
if(d[nxt] > d[now] + 1) {
d[nxt] = d[now] + 1;
q.push(nxt);
}
}
}
for(int i=0;i<n;i++) if(d[i] == 0) {
d[i] = 2;
for(int j : adj[i]) if(s[j] == '1') d[i] = 1;
}
return d;
}
int main() {
ios::sync_with_stdio(false); cin.tie(NULL);
cin >> n >> m >> k;
for(int i=0;i<m;i++) {
int u, v; cin >> u >> v;
--u;
--v;
adj[u].push_back(v);
adj[v].push_back(u);
}
string s; cin >> s;
int st1 = -1, st2 = -1;
for(int i=0;i<n;i++) {
if(s[i] == '1') {
if(st1 != -1) st2 = i;
else st1 = i;
}
}
for(int i=0;i<k;i++) {
cin >> x[i];
--x[i];
}
vector<int> dont(n, 0);
vector<ll> v1 = shortest_path(st1, dont);
vector<ll> v2 = shortest_path(st2, dont);
dont[st1] = 1;
dont[st2] = 0;
vector<ll> v3 = shortest_path(st2, dont);
dont[st1] = 0;
dont[st2] = 1;
vector<ll> v4 = shortest_path(st1, dont);
dont[st1] = dont[st2] = 1;
vector<ll> v5 = shortest_path(x[0], dont);
vector<ll> ns = next_stop(s);
ll Cost = 0;
for(int i=1;i<k;i++) {
Cost += ns[x[i]];
}
ll Cost2 = Cost + ns[st1] * (k-1);
vector<ll> ans(n);
for(int i=0;i<n;i++) {
ans[i] = min(v5[i], Cost2 + v1[x[0]] + v1[st2] + v2[i]);
ans[i] = min(ans[i], Cost + v3[x[0]] + v3[i]);
ans[i] = min(ans[i], Cost + v4[x[0]] + v4[i]);
}
for(int i=0;i<n;i++) cout << ans[i] << "\n";
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |