954D. Fight Against Traffic - Codeforces Solution C++

  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!!