Cod sursa(job #93405)

Utilizator blasterzMircea Dima blasterz Data 18 octombrie 2007 18:52:54
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
using namespace std;
#include <cstdio>
#include <vector>
#include <string>
#define pb push_back

int d[30001], n;
struct nod { unsigned int n:16, c:25; nod(){}; nod(int a, int b){n=a; c=b;};}__attribute__ ((packed));

vector<nod> a[30001];
int source, sink;

void read()
{
  int m, p, q, c;
  freopen("sate.in","r",stdin);
  scanf("%d %d %d %d\n", &n, &m, &source, &sink);
  ++m;
  while(m--)
    {
      scanf("%d %d %d\n", &p, &q, &c);
      a[p].pb(nod(q,c));
      a[q].pb(nod(p,c));
    }

}

void solve()
{
  int Q[30001], p=1, q=1, u;
  bool use[30001];
  memset(use, 0, sizeof(use));
  use[source]=1;
  Q[1]=source;
  vector<nod>::iterator it;

  while(p<=q)
    {
      u=Q[p++];
      
      for(it=a[u].begin();it!=a[u].end();++it)
	if(!use[it->n])
	  {
	    Q[++q]=it->n;
	    if(u>it->n) d[it->n]=d[u]-it->c;
	    else d[it->n]=d[u]+it->c;
	    use[it->n]=1;
	  }
    }
     
  freopen("sate.out","w",stdout);
  printf("%d\n", d[sink]); 

}

int main()
{
  read();
  solve();
  return 0;
}