Cod sursa(job #864595)

Utilizator dragangabrielDragan Andrei Gabriel dragangabriel Data 25 ianuarie 2013 13:28:31
Problema Drumuri minime Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<cstdio>
#include<vector>
#include<algorithm>
#include<cstring>
#include<deque>
#define MAX 1505
#define mod 104659
using namespace std;
int n,i,j,k,x,y,a,b,m,cost[MAX],rez[MAX];
vector<pair<int,int> >v[MAX];
bool viz[MAX];
deque<int>c;

int main()
{
	freopen("dmin.in","r",stdin);
	freopen("dmin.out","w",stdout);
	scanf("%d %d",&n,&m);
	for (i=1;i<=m;i++) 
		scanf("%d %d %d",&a,&b,&k),v[a].push_back(make_pair(b,k)),v[b].push_back(make_pair(a,k));
	c.push_back(1);viz[1]=true;
	rez[1]=1;
	while (!c.empty())
	{
		x=c.front();
		for (j=0;j<v[x].size();j++)
		{
			a=v[x][j].first;
			b=v[x][j].second;
			if (!viz[a])
			{
				viz[x]=true;
				c.push_back(a);
				cost[a]=cost[x]+b;
				rez[a]+=rez[x];
			}else if (cost[a]==cost[x]+b)
			{
				c.push_back(a);
				cost[a]=cost[x]+b;
				rez[a]=rez[x];
			}
		}
		c.pop_front();
	}
	for (j=2;j<=n;j++) printf("%d ",rez[j]);
	return 0;
}