Skip to content

Commit 0c2e966

Browse files
authored
Create 3108. Minimum Cost Walk in Weighted Graph (#746)
2 parents ccdce67 + e9cc2fb commit 0c2e966

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
class Solution {
2+
private:
3+
int getcmpcost(int node, vector<vector<pair<int,int>>>&adj,vector<bool>&vis,vector<int>&cmp,int cid){
4+
queue<int>q;
5+
int ccost=INT_MAX;
6+
q.push(node);
7+
vis[node]=1;
8+
while(!q.empty()){
9+
int Node=q.front();
10+
q.pop();
11+
cmp[Node]=cid;
12+
for(auto [nbr,w]:adj[Node]){
13+
ccost&=w;
14+
if(vis[nbr])continue;
15+
vis[nbr]=1;
16+
q.push(nbr);
17+
}
18+
}
19+
return ccost;
20+
}
21+
public:
22+
vector<int> minimumCost(int n, vector<vector<int>>& edges, vector<vector<int>>& query) {
23+
vector<vector<pair<int,int>>>adj(n);
24+
for(auto ele:edges){
25+
adj[ele[0]].push_back({ele[1],ele[2]});
26+
adj[ele[1]].push_back({ele[0],ele[2]});
27+
}
28+
vector<bool>vis(n,0);
29+
vector<int>cmp(n);
30+
vector<int>cmpcost;
31+
int cid=0;
32+
for(int node=0;node<n;node++){
33+
if(!vis[node]){
34+
cmpcost.push_back(getcmpcost(node,adj,vis,cmp,cid));
35+
cid++;
36+
}
37+
}
38+
vector<int>ans;
39+
for(auto q:query){
40+
int s=q[0];
41+
int e=q[1];
42+
if(cmp[s]==cmp[e])ans.push_back(cmpcost[cmp[s]]);
43+
else ans.push_back(-1);
44+
}
45+
return ans;
46+
}
47+
};

0 commit comments

Comments
 (0)