Cod sursa(job #671638)

Utilizator hiticas_abelhiticasabel hiticas_abel Data 31 ianuarie 2012 18:33:09
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <fstream>
#include <vector>
#include <stdio.h>

using namespace std;

vector <int> A[100001],Dist[100001];
int c[100001],viz[100001],n,m,k,i,cost[100001],start,end;
void citeste_graf()
{    int x,y,distanta;
     freopen("sate.in","r",stdin);
     
     scanf("%d%d%d%d",&n,&m,&start,&end);
     //f>>n>>m>>start>>end;
     
     for(i=1;i<=m;i++)
     {
                      
                      //f>>x>>y>>distanta;
                      scanf("%d%d%d", &x,&y,&distanta);
                      A[x].push_back(y);
					  A[y].push_back(x);
					  Dist[x].push_back(distanta);
					  Dist[y].push_back(-distanta);
                      }
     //f.close();
     fclose(stdin);
     }
     
void bfs(int nod)
{
     int li,ls,nr_vecini,vecin,nodd;
     li=1;ls=1;
     c[li]=nod;viz[nod]=1;cost[nod]=0;
     
  while (li<=ls && cost[end]==0)
    {nodd=c[li];
        nr_vecini=A[nodd].size();
     for(i=0;i<nr_vecini;i++)
	 {
		 vecin=A[nodd][i];
                             if (viz[vecin]==0)
                                  {
                                                   ls++;
                                                   c[ls]=vecin;
                                              
                                                   viz[vecin]=1;
                                                 //  if (c[li]>c[ls])
												   cost[vecin]=cost[nodd]+Dist[nodd][i];
										
                                                      
                                                   }
	 }
       li++;
       }
     
}

void afisare()
{
     freopen ("sate.out","w",stdout);
          printf("%d ",cost[end]);
           //<cost[end]<<" ";
           
      fclose(stdout);
      }


int main()
{
    citeste_graf();
    bfs(start);
    afisare();
    return 0;
}