➤ Problem Link : 954D. Fight Against Traffic
✅ C++ Solution :
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
bool visited[1001];
int disS[1001];
int disT[1001];
void bfs(int src, unordered_set<int> adj[], int n, bool key)
{
memset(visited,0,n+1);
visited[src]=1;
if(!key)
disS[src]=0;
else
disT[src]=0;
queue<int> q;
q.push(src);
int v;
while(!q.empty())
{
int v = q.front();
q.pop();
for(auto it = adj[v].begin(); it!=adj[v].end(); it++)
{
if(!visited[*it])
{
visited[*it]=1;
if(!key)
disS[*it]=disS[v]+1;
else
disT[*it]=disT[v]+1;
q.push(*it);
}
}
}
}
int main()
{
int n,m,s,t,u,v,ans=0;
cin>>n>>m>>s>>t;
unordered_set<int> adj[n+1];
for(int i=1;i<=m;i++)
{
cin>>u>>v;
adj[u].insert(v);
adj[v].insert(u);
}
bfs(s,adj,n,0);
bfs(t,adj,n,1);
// for(int i=1;i<=n;i++)
// cout<<disS[i]<<" "<<disT[i]<<endl;
for(int i=1;i<n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(adj[i].find(j)!=adj[i].end())
continue;
if((disS[i] + disT[j] + 1 >= disS[t]) && (disS[j] + disT[i] +1 >= disS[t]))
ans++;
}
}
cout<<ans;
}
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!
