#include <bits/stdc++.h>
#include "crocodile.h"
using namespace std;
#define SPEED \
ios_base::sync_with_stdio(0); \
cin.tie(NULL); \
cout.tie(NULL);
#define pb push_back
#define ins insert
#define fi first
#define se second
#define endl "\n"
#define ALL(x) x.begin(), x.end()
#define sz(x) x.size()
#define intt int
const intt mod = 1e9 + 7;
const intt base = 31;
const intt inf = 1e9;
const intt mxN = 1e6 + 5;
const intt l = 21;
intt travel_plan(intt N, intt M, intt R[][2], intt L[], intt K, intt P[]) {
intt isexit[N+1], D[N+1], used[N+1], deg[N+1], edeg[N+1];
set<pair<intt,intt>> graph[2 * N+1];
for(intt i = 0; i < N; i++) {
deg[i] = edeg[i] = isexit[i] = 0;
}
for(intt i = 0; i < M; i++) {
++deg[R[i][0]];
++deg[R[i][1]];
}
// for(intt i = 0; i < M; i++) {
// cin >> L[i];
// }
// cin >> K;
for(intt i = 0; i < K; i++) {
// cin >> P[i];
isexit[P[i]] = 1;
}
for(intt i = 0; i < M; i++) {
intt a = R[i][0], b = R[i][1];
graph[a].insert({b, L[i]});
graph[b].insert({a, L[i]});
if(isexit[a]) ++edeg[b];
if(isexit[b]) ++edeg[a];
}
vector<intt> temp;
for(intt i = 0; i < N; i++) {
intt fl = 0;
if(isexit[i]) continue;
for(auto u : graph[i]) {
if(isexit[u.fi]) {
fl = 1;
break;
}
}
if(!fl) temp.pb(i);
}
for(intt node : temp) {
for(auto u : graph[node]) {
graph[u.fi].erase({node, u.se});
}
}
auto bfs = [&] () {
intt node = 0;
for(intt i = 0; i < N; i++) {
D[i] = inf;
used[i] = 0;
};
D[node] = 0;
queue<intt> q;
q.push(node);
while(not q.empty()) {
intt cur = q.front();
q.pop();
if(used[cur]) continue;
used[cur] = 1;
for(auto g : graph[cur]) {
intt u = g.fi, w = g.se;
if(D[u] > D[cur] + w) {
D[u] = D[cur] + w;
q.push(u);
}
}
}
};
bfs();
intt tempp = inf, nod = -1;
for(intt i = 0; i < N; i++) {
pair<intt,intt> fif = *graph[i].begin();
intt nodee = fif.fi;
if(isexit[i] && !((deg[i] == 1 && edeg[nodee] == 1)) && tempp > D[i]) {
tempp = min(tempp, D[i]);
nod = i;
}
}
intt ans = inf;
for(intt i = 0; i < N; i++) {
pair<intt,intt> fif = *graph[i].begin();
intt nodee = fif.fi;
if(isexit[i] && !((deg[i] == 1 && edeg[nodee] == 1)) && i != nod) {
ans = min(ans, D[i]);
}
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |