Buon pomeriggio,
con questa versione di Dijkstra ottengo solo 20/100. Dove potrebbe essere l’errore?
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <stdio.h>
#include <set>
#include <vector>
#include <climits>
using namespace std;
fstream in,out;
int main(){
in.open("input.txt",ios::in);
out.open("output.txt",ios::out);
long long n,m,s,f;
in>>n>>m>>s>>f;
s--;
f--;
vector <vector < pair<long long,long long> > > grafo(n);
long long i,da,a,peso;
for(i=0;i<m;i++){
in>>a>>da>>peso;
a--;
da--;
grafo[a].push_back(make_pair(peso,da));
grafo[da].push_back(make_pair(peso,a));
}
set <pair <long long,long long> > coda;
vector <long long> d(n,LLONG_MAX);
vector <bool> b(n,false);
d[s] = 0;
b[s] = true;
coda.insert(make_pair(0,s));
set < pair <long long,long long> > :: iterator it;
set < pair <long long,long long> > :: iterator itt;
long long x,y,z;
while(!coda.empty()){
it=coda.begin();
x = (*it).second;
coda.erase(it);
for(i=0;i<grafo[x].size()i++){
y = grafo[x][i].second;
z = grafo[x][i].first;
itt=coda.find(make_pair(d[y],y));
if( d[y] > d[x]+z ){
d[y] = d[x] + z;
if(b[y]){
coda.erase(itt);
}
else{
b[y]=true;
}
coda.insert(make_pair(d[y],y));
}
}
}
out<<d[f];
in.close();
out.close();
return 0;
}
Grazie