Cod sursa(job #2146631)

Utilizator CozmaCatalinCozma Catalin CozmaCatalin Data 28 februarie 2018 09:00:09
Problema Drumuri minime Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 1501;
const int MMAX = 2501;

int N,M;

#define oo (1 << 30)
#define MOD 104659
bitset <NMAX> beenThere;
int countt;
vector < pair < int , int >  > myVector[NMAX];
multiset < int > Set[NMAX];

int Road[NMAX*2];

long long Answer =1;

struct EDGE
{
    int x,y,price;
}Edge[MMAX];

inline void ScanData()
{
    scanf("%d%d", &N , &M);

    for ( int i = 1; i <= M ; ++i)
    {
        int a,b,c;
        scanf("%d%d%d", &a,&b,&c);

        Edge[i].x = a , Edge[i].y = b , Edge[i].price = c;

        myVector[a].push_back(make_pair(b,c));
        myVector[b].push_back(make_pair(a,c));
    }
}

void DFS(int Node)
{
    beenThere[Node] = true;
    Road[++countt] = Node;

    int Who = Road[countt];

    Set[Who].insert(Answer);

    for ( size_t k = 0 ; k < myVector[Node].size() ; ++k)
    {
        int neighbor = myVector[Node][k].first;
        int price = myVector[Node][k].second;

        Answer = (Answer*price)%MOD;
        if(!beenThere[neighbor])
            DFS(neighbor);

            Answer = (Answer/price)%MOD;
    }

    countt--;
    beenThere[Node] =false;


}

int main()
{
    freopen("dmin.in", "r" , stdin);
    freopen("dmin.out","w", stdout);

    ScanData();

    DFS(1);

    for ( int i = 2; i <= N ; ++i)
    {
        int Min = *Set[i].begin();
        printf("%d " , Set[i].count(Min));
    }


}