Skip to content

Commit 131104e

Browse files
authored
Create 1334. Find the City With the Smallest Number of Neighbors at a Threshold Distance.cpp
1 parent c8b56b3 commit 131104e

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
//Creating a set of key(distance,index) for looking up minimum distance in logn time
2+
set<pair<int,int>> pq;
3+
//Global Matrix for storing weight of each edge
4+
int wt[105][105];
5+
6+
class Solution {
7+
public:
8+
void djkstrA(int i,int dp[],int n,vector<int> adj[]){
9+
if(pq.size()==0) return;
10+
else{
11+
auto kt = pq.begin();
12+
int dist = kt->first;
13+
int ind = kt->second;
14+
pq.erase(kt);
15+
for(auto x:adj[ind]){
16+
if(dp[x]>dp[ind]+wt[ind][x]){
17+
auto it = pq.find({dp[x],x});
18+
pq.erase(it);
19+
dp[x] = dp[ind]+wt[ind][x];
20+
pq.insert({dp[x],x});
21+
}
22+
}
23+
djkstrA(i,dp,n,adj);
24+
}
25+
}
26+
int findTheCity(int n, vector<vector<int>>& edges, int d) {
27+
int i,j,k,m,ct=0,val,ans=1e9;
28+
vector<int> adj[n];
29+
for(i=0;i<edges.size();i++){
30+
j = edges[i][0];
31+
k = edges[i][1];
32+
wt[k][j] = edges[i][2];
33+
wt[j][k] = edges[i][2];
34+
adj[j].push_back(k);
35+
adj[k].push_back(j);
36+
}
37+
//Checking for every node and using DjkstrA for each and every node as source
38+
for(i=0;i<n;i++){
39+
int dp[n];
40+
pq.clear();
41+
for(j=0;j<n;j++) dp[j]=1e9;
42+
dp[i]=0;
43+
for(j=0;j<n;j++) pq.insert({dp[j],j});
44+
djkstrA(i,dp,n,adj);
45+
int k=0;
46+
for(j=0;j<n;j++){
47+
if(dp[j]<=d) k++;
48+
}
49+
if(ans>=k){
50+
ans=k;
51+
val=i;
52+
}
53+
}
54+
return val;
55+
}
56+
};

0 commit comments

Comments
 (0)