Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll long long
- #define pb push_back
- #define pf push_front
- using namespace std;
- ifstream f("reinvent.in");
- ofstream g("reinvent.out");
- const int NMAX=100005;
- const int INF=100005;
- int n,m,k;
- vector<int> adj[NMAX];
- int dmin[NMAX],dmin2[NMAX];
- int ant[NMAX];
- int main()
- {
- f>>n>>m>>k;
- for(int i=1; i<=m; i++)
- {
- int x,y;
- f>>x>>y;
- adj[x].pb(y);
- adj[y].pb(x);
- }
- for(int i=1; i<=n; i++)
- {
- dmin[i]=INF;
- dmin2[i]=INF;
- }
- queue<int> q;
- for(int i=1; i<=k; i++)
- {
- int x;
- f>>x;
- q.push(x);
- dmin[x]=0;
- ant[x]=x;
- }
- int sol=INF;
- while(!q.empty())
- {
- int node=q.front();
- for(auto x:adj[node])
- {
- int d=1+dmin[node];
- if(ant[x]!=ant[node])
- {
- sol=min(sol,dmin[x]+dmin[node]+1);
- }
- if(d<dmin[x])
- {
- ant[x]=ant[node];
- dmin[x]=d;
- q.push(x);
- }
- }
- q.pop();
- }
- g<<sol;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement