Pagini recente » Cod sursa (job #1728110) | Cod sursa (job #3151844) | Cod sursa (job #986043) | Cod sursa (job #2074539) | Cod sursa (job #628853)
Cod sursa(job #628853)
#include <stdio.h>
#include <vector>
#define MMAX 100024
#define NMAX 30005
using namespace std;
struct str{
int nod, l;
}coada [NMAX];
struct s{
int nod;
int l;
};
vector <s> muchie[NMAX];
bool viz[NMAX];
int lung[NMAX];
int main(){
int n,m,x,y;
FILE *fin=fopen("sate.in","r");
fscanf(fin,"%d%d%d%d",&n,&m,&x,&y);
int i;
int a,b,c;
s aux;
for(i=1;i<=m;i++){
fscanf(fin,"%d%d%d",&a,&b,&c);
aux.nod=b;
aux.l=c;
muchie[a].push_back(aux);
aux.nod=a;
muchie[b].push_back(aux);
lung[a]++;
lung[b]++;
}
//afisez ce am cicit...
/* int j;
for(i=1;i<=n;i++){
printf("vecinii si lungimile nodului %d\n",i);
for(j=0;j<lung[i];j++){
printf("(%d,%d),",muchie[i][j].nod,muchie[i][j].l);
}
printf("\n");
}*/
//termin afisAREA/
int li=0,ls=1;
coada[0].nod=x;
coada[0].l=0;
viz[x]=true;
FILE *fout=fopen("sate.out","w");
while(li<ls){
//incerc sa expandez nodul coada[li]
for(i=0;i<lung[coada[li].nod];i++){
if(viz[muchie[coada[li].nod][i].nod]==false){
viz[muchie[coada[li].nod][i].nod]=true;
coada[ls].nod=muchie[coada[li].nod][i].nod;
if(coada[li].nod<muchie[coada[li].nod][i].nod)
coada[ls].l=coada[li].l+muchie[coada[li].nod][i].l;
else coada[ls].l=coada[li].l-muchie[coada[li].nod][i].l;
//printf("adaug (%d,%d)\n",coada[ls].nod,coada[ls].l);
//daca nodul pe care il adaug e y..gata
if(coada[ls].nod==y){
fprintf(fout,"%d\n",coada[ls].l);
// printf("%d\n",coada[ls].l);
fclose(fout);
return 0;
}
ls++;
}
}
li++;
}
return 0;
}