Skip to content
Programmingoneonone
Programmingoneonone
  • Home
  • CS Subjects
    • Internet of Things (IoT)
    • Digital Communication
    • Human Values
  • Programming Tutorials
    • C Programming
    • Data structures and Algorithms
    • 100+ Java Programs
    • 100+ C Programs
  • HackerRank Solutions
    • HackerRank Algorithms Solutions
    • HackerRank C problems solutions
    • HackerRank C++ problems solutions
    • HackerRank Java problems solutions
    • HackerRank Python problems solutions
Programmingoneonone

HackerEarth Monk in the Secret Services problem solution

YASH PAL, 31 July 2024
In this HackerEarth Monk in the Secret Services problem solution The secret services of Armin, an otherwise peace-loving country, have decided to perform a surgical strike in the war-torn city of Tashka. Tashka is under enemy control and the objective of the strike is to gain control over the city.
The mission is subdivided into the following steps:
1) Divide in groups and infiltrate all enemy bases in Tashka as unarmed civilians, and find the status of enemy’s defense strength at that base.
( You can assume that the number of groups are sufficiently large to cover each base separately )
2) Pick up the required amount of ammunition from our secret ammunition store in the city.
3) Return to the bases and destroy the enemy defense.
4) Rush to the Town Hall for the Helicopter pick up out of the town.
There are a total of N buildings in Tashka, numbered from 1 to N . The agents will be dropped at building denoted by S, post which they will divide into groups and each enemy base will have a group moving towards it. The ammunition store is denoted by A and town hall is denoted by H . All the buildings except these three are enemy bases and are to be infiltrated. There are a total of M bidirectional roads in the city, each road connects two cities. There can be multiple roads between a pair of cities and each road has a time taken to cross associated with its terrain.
Monk is made in charge of the pickup. He can not land the Helicopter before all the groups have arrived at the Town Hall. Find the Minimum units of Time, post dropping the agents, that the Helicopter should be landed such that all groups are able to reach the Town Hall.
HackerEarth Monk in the Secret Services problem solution

HackerEarth Monk in the Secret Services problem solution.

#include<bits/stdc++.h>

using namespace std;

#define rep(i,n) for(i=0;i<n;i++)
#define ll long long
#define elif else if
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define gc getchar_unlocked

int lim=1000000000;
int main()
{
freopen("in","r",stdin);
freopen("out","w",stdout);
int t;
cin>>t;
assert(1<=t && t<=10);
while(t--)
{
int i,j,k,n,m,x,c,y;
cin>>n>>m;
assert(1<=n && n<=100);
assert(1<=m && m<=100000);
int adj[101][101];
rep(i,n+1)
{
rep(j,n+1)
{
adj[i][j]=lim;
}
adj[i][i]=0;
}
rep(i,m)
{
cin>>x>>y>>c;
assert(1<=x && x<=n);
assert(1<=y && y<=n);
assert(1<=c && c<=100);
adj[x][y]=min(adj[x][y],c);
adj[y][x]=adj[x][y];
}
int s,h,a,ans=0;
cin>>s>>a>>h;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
for(k=1;k<=n;k++)
{
adj[j][k]=min(adj[j][i]+adj[i][k],adj[j][k]);
}
}
}

for(i=1;i<=n;i++)
{
if(i==s || i==a || i==h)continue;
if(adj[s][i]==lim || adj[i][a]==lim || adj[i][h]==lim)
assert(0);
ans=max( adj[s][i]+ 2*adj[i][a] + adj[i][h],ans);
}
cout<<ans;
if(t>0)cout<<"n";
}
return 0;
}

Second solution

#include<bits/stdc++.h>

using namespace std;

typedef pair<int,int> II;
typedef vector< II > VII;
typedef vector<int> VI;
typedef vector< VI > VVI;
typedef long long int LL;

#define PB push_back
#define MP make_pair
#define F first
#define S second
#define SZ(a) (int)(a.size())
#define ALL(a) a.begin(),a.end()
#define SET(a,b) memset(a,b,sizeof(a))

#define si(n) scanf("%d",&n)
#define dout(n) printf("%dn",n)
#define sll(n) scanf("%lld",&n)
#define lldout(n) printf("%lldn",n)
#define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL)

#define TRACE

#ifdef TRACE
#define trace(...) __f(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1>
void __f(const char* name, Arg1&& arg1){
cerr << name << " : " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args){
const char* comma = strchr(names + 1, ',');cerr.write(names, comma - names) << " : " << arg1<<" | ";__f(comma+1, args...);
}
#else
#define trace(...)
#endif

//FILE *fin = freopen("in","r",stdin);
//FILE *fout = freopen("out","w",stdout);

const int INF=int(1e7);
const int N=100;
int dist[N][N];
int main()
{
fast_io;
int t;cin>>t;
while(t--)
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
dist[i][j]=INF;
for(int i=0;i<n;i++)
dist[i][i]=0;
for(int i=0;i<m;i++)
{
int x,y,c;
cin>>x>>y>>c;
x--,y--;
if(dist[x][y]>c)
{
dist[x][y]=c;
dist[y][x]=c;
}
}
int s,a,h;
cin>>s>>a>>h;
s--,a--,h--;

//floyd warshall to compute all pairs shortest paths
for(int k=0;k<n;k++)
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j]);
int ans=0;
for(int i=0;i<n;i++)
{
if(i==s||i==a||i==h)
continue;
ans=max(ans,dist[s][i]+dist[i][a]+dist[a][i]+dist[i][h]);
}
cout<<ans<<"n";
}
return 0;
}
coding problems solutions

Post navigation

Previous post
Next post

Pages

  • About US
  • Contact US
  • Privacy Policy

Programing Practice

  • C Programs
  • java Programs

HackerRank Solutions

  • C
  • C++
  • Java
  • Python
  • Algorithm

Other

  • Leetcode Solutions
  • Interview Preparation

Programming Tutorials

  • DSA
  • C

CS Subjects

  • Digital Communication
  • Human Values
  • Internet Of Things
  • YouTube
  • LinkedIn
  • Facebook
  • Pinterest
  • Instagram
©2025 Programmingoneonone | WordPress Theme by SuperbThemes