Cod sursa(job #294921)

Utilizator VmanDuta Vlad Vman Data 2 aprilie 2009 20:47:23
Problema Reconst Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
using namespace std;
#include <cstdio>
#include <vector>

#define Nmax 2048

int N, M, i;
vector< pair<int,int> > G[Nmax];
int D[Nmax], Q[Nmax], st, dr;
char W[Nmax];

void citire()
{
 int a, b, s;
 freopen("reconst.in","r",stdin);
 scanf("%d %d",&N, &M);
 for (i=0; i<M; ++i)
     {
      scanf("%d %d %d",&a, &b, &s);
      ++b;
      G[a].push_back( make_pair(b, s) );
      G[b].push_back( make_pair(a, -s) );
     }
}

void bfs(int who)
{
 int nod;
 vector< pair<int,int> > :: iterator it;
 W[ Q[st = dr = 0] = who ] = 1;
 while (st<=dr)
       {
        nod = Q[st];
        for (it=G[nod].begin(); it<G[nod].end(); ++it)
            if (!W[it->first])
               {
                W[ Q[++dr] = it->first ] = 1;
                D[ Q[dr] ] = D[nod] + it->second;
               }
        ++st;
       }
}

int main()
{
 citire();
 for (i=1; i<=N+1; ++i)
     if (!W[i]) bfs(i);
 freopen("reconst.out","w",stdout);
 for (i=1; i<=N; ++i)
     printf("%d ",D[i+1] - D[i]);
 printf("\n");
 return 0;
}