Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define ll long long int
- #define pb push_back
- #define mp make_pair
- #define pf printf
- #define sf scanf
- #define ins insert
- #define NMax 200002
- using namespace std;
- vector<int> addj[200010]; // declare the space needed
- int vis[200010],aval[200010], bval[200010], abval[200010]; // SIZE
- void dfs(int a)
- {
- vis[a]=-1;
- for (int i = 0; i < addj[a].size(); ++i)
- {
- if(vis[addj[a][i]]==-1)
- continue;
- else if (vis[addj[a][i]]==0)
- {
- dfs(addj[a][i]);
- }
- aval[a]=min(aval[a],aval[addj[a][i]]+1);
- bval[a]=min(bval[a],bval[addj[a][i]]+1);
- abval[a]=min(abval[a],abval[addj[a][i]]+1);
- }
- abval[a]=min(abval[a],aval[a]+bval[a]);
- vis[a]=1;
- }
- int main()
- {
- int n,m,a,b;
- cin>>n>>m>>a>>b;
- int y,u;
- vector<int>v[n+1];
- for(int i=0;i<n+1;i++)
- {
- bval[i]=NMax;
- aval[i]=NMax;
- abval[i]=NMax;
- }
- aval[a]=0;
- bval[b]=0;
- for(int i=0;i<m;i++)
- {
- cin>>y>>u;
- v[y].pb(u);
- }
- for(int i=0;i<n+1;i++)
- addj[i]=v[i];
- dfs(0);
- cout<<abval[0]<<endl;
- return 0;
- }
Add Comment
Please, Sign In to add comment