RELIGIOUS PEOPLE doubt in my code

#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
class graph{
map<int,list<pair<int,int> > >m;

public:
  
   void add_edge(int u,int v,int z){
       m[u].push_back(make_pair(v,z));
       m[v].push_back(make_pair(u,z));
   }
   void bfs(int m1,int src,int costt,bool visited[],int distance[],int temple[]){
       
      
       distance[src]=0;
      
     
       temple[src]=1;
       queue<pair<int,int> > q;
       q.push(make_pair(src,0));
       int e=0;
       while(!q.empty()){
            auto p=q.front();
            q.pop();
            visited[p.first]=true;
            int dist=p.second;
            for(auto i:m[p.first]){
                if(!visited[i.first]){
                    visited[i.first]=true;
                   distance[i.first]=dist+i.second;
                   
                   if(costt<distance[i.first]){
                       temple[i.first]=1;
                       if(e==0)
                         e=i.first;
                       distance[i.first]=0;
                       
                   }
                   
                    q.push(make_pair(i.first,distance[i.first]));
                   


            }
            }
           
            temple[src]=2;
            for(int i=1;i<=m1;i++){
                if(temple[i]==1){
                    q.push(make_pair(temple[i],0));
                    temple[i]=2;
                    
                }
            }
            // q.push(make_pair(temple[e],0));

       }
       //cout<<"ee"<<endl;
      


   }

};

int main(){

int t;
cin>>t;
while(t--){
    
graph g;
int m,n,a,b;
cin>>m>>n>>a>>b;
int src=0;

for(int i=0;i<n;i++){
   
    int u,v;
    cin>>u>>v;
    if(src==0)src=u;


    g.add_edge(u,v,b);
}

  bool visited[m+1];
      for(int i=1;i<=m;i++){
          visited[i]=false;
      }
       int temple[m+1];
       for(int i=1;i<=m;i++){
           temple[i]=0;
       }
       int distance[m+1];
       for(int i=1;i<=m;i++) distance[i]=INT_MAX;
 for(int i=1;i<=m;i++){
     if(!visited[i]){
          g.bfs(m,i,a,visited,distance,temple);
     }
 }
  int sum=0;
       for(int i=1;i<=m;i++){
           
           if(temple[i]==2){
               sum+=a;
           }
       }
       for(int j=1;j<=m;j++){
           if(distance[j]>0 && distance[j]!=INT_MAX)
              sum+=distance[j];
       }
       cout<<sum<<endl;

}
}

please tell wts wrong

Please mention Question link also