Skip to content
Programming101
Programming101

Learn everything about programming

  • Home
  • CS Subjects
    • IoT – Internet of Things
    • 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
Programming101
Programming101

Learn everything about programming

HackerEarth Ways problem solution

YASH PAL, 31 July 2024
In this HackerEarth Ways problem solution Amit and his wife Shweta are in Singapore for their honeymoon. Shweta wants to visit every hotel present there. Amit and Shweta are in their hotel and Amit is planning out how can he fulfill Shweta’s wish.
There are N hotels there(they are staying at the hotel No. 1). There are exactly M roads connecting those hotels (It is guaranteed that any hotel can be visited from any other by roads). Each road has its length. Every day the couple visits exactly one unvisited hotel and come back. Amit wants to take the shortest distance to get to any hotel from his hotel(they use the same path to get back to their hotel).
But there is a problem , Singapore government has announced that the tourists have to choose N-1 roads to move in the city i.e Amit has to choose total N-1 roads such that they can visit all the other hotels . Also path taken to reach any other hotel from their hotel should be the shortest. So in how many ways can Amit choose such N-1 roads.
HackerEarth Ways problem solution

HackerEarth Ways problem solution.

#include <bits/stdc++.h>

typedef long long ll;

using namespace std;

ll minT = 1;
ll maxT = 10;
ll minN = 1;
ll maxN = 1000;
ll minM = 0;
ll maxM = 1e5;
ll minC = 1;
ll maxC = 1000;

ll mod = 1e9 + 7;
const int max_n = 1100;
ll inf = 1e15;

class compare
{
public:
bool operator() (const pair<ll, ll> &a, const pair<ll, ll> &b)
{
return (a.first > b.first);
}
};

vector<pair<ll, ll> > v[max_n];

ll cnt[max_n], minDis[max_n];

priority_queue<pair<ll, ll>, vector<pair<ll, ll> >, compare > pq;

bool visited[max_n];

int main()
{
ll t, i, j, n, m, ans, chVer, chDis, nextVer, nextDis, a, b, c, siz;
pair<ll, ll> tempPr;

scanf("%lld", &t);
assert(t>=minT && t<=maxT);

while(t--)
{
scanf("%lld %lld", &n, &m);
assert(n>=minN && n<=maxN);
assert(m>=minM && m<=maxM);

for(i=1;i<=n;++i)
{
v[i].clear();
minDis[i] = inf;
cnt[i] = 0LL;
visited[i] = false;
}

for(i=0;i<m;++i)
{
scanf("%lld %lld %lld", &a, &b, &c);
assert(a>=minN && a<=maxN && a<=n);
assert(b>=minN && b<=maxN && b<=n);
assert(c>=minC && c<=maxC);


v[a].push_back(make_pair(c, b));
v[b].push_back(make_pair(c, a));
}

minDis[1] = 0LL;
pq.push(make_pair(minDis[1], 1LL));

while(!pq.empty())
{
tempPr = pq.top();
pq.pop();

nextDis = tempPr.first;
nextVer = tempPr.second;

if(nextDis == inf)
continue;

//printf("nextVer = %lld nextDis= %lldn", nextVer, nextDis);

if(nextDis == minDis[nextVer])
{
++cnt[nextVer];
}

if(visited[nextVer])
continue;
visited[nextVer] = true;

siz = v[nextVer].size();
for(j=0;j<siz;++j)
{
chDis = v[nextVer][j].first;
chVer = v[nextVer][j].second;

if(minDis[nextVer]+chDis <= minDis[chVer])
{
minDis[chVer] = minDis[nextVer]+chDis;
pq.push(make_pair(minDis[chVer], chVer));
}
}
}

ans = 1LL;
for(i=1;i<=n;++i)
{
//printf("cnt[%lld] = %lldn", i, cnt[i]);
ans = (ans * cnt[i])%mod;
}

printf("%lldn", ans);
}

return 0;
}

Second solution

#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define ll long long int
#define pb push_back
#define mk make_pair
#define pp pair<int,int>
ll power(ll a, ll b) {
ll x = 1, y = a;
while(b > 0) {
if(b%2 == 1) {
x=(x*y);
if(x>mod) x%=mod;
}
y = (y*y);
if(y>mod) y%=mod;
b /= 2;
}
return x;
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
int t;
cin>>t;
while(t--) {
int n,m,u,v,c,i;
int dist[1002],ans[1002],vis[1002];
vector<pp>adj[1002];
memset(dist,mod,sizeof dist);
memset(ans,0,sizeof ans);
memset(vis,0,sizeof vis);
cin>>n>>m;
while(m--) {
cin>>u>>v>>c;
u--;
v--;
adj[u].push_back(make_pair(c,v));
adj[v].push_back(make_pair(c,u));
}
dist[0] = 0;
priority_queue<pp,vector<pp>,greater<pp> >q;
q.push(make_pair(0,0));
while(q.size()) {
pp p = q.top();
q.pop();
ans[p.second] += dist[p.second]==p.first;
if(vis[p.second]) continue;
vis[p.second] = 1;
for(i = 0; i < adj[p.second].size(); i++) {
if(dist[adj[p.second][i].second] >= dist[p.second] + adj[p.second][i].first) {
dist[adj[p.second][i].second] = dist[p.second] + adj[p.second][i].first;
q.push(make_pair(dist[adj[p.second][i].second],adj[p.second][i].second));
}
}
}
ll x = 1;
for(i = 0; i < n; i++) {
x = (x*ans[i])%mod;
}
cout<<x<<endl;
}
return 0;
}
coding problems

Post navigation

Previous post
Next post
  • HackerRank Separate the Numbers solution
  • How AI Is Revolutionizing Personalized Learning in Schools
  • GTA 5 is the Game of the Year for 2024 and 2025
  • Hackerrank Day 5 loops 30 days of code solution
  • Hackerrank Day 6 Lets Review 30 days of code solution
How to download udemy paid courses for free

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
©2025 Programming101 | WordPress Theme by SuperbThemes