Cod sursa(job #1766950)

Utilizator stefanchistefan chiper stefanchi Data 28 septembrie 2016 17:22:39
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <vector>///Algoritmul lui Prim
#include <cstdio>
#include <queue>
#include <bitset>
#define Nmax  200100
using namespace std;
int tatal[Nmax],cost[Nmax];
vector <pair<int,int>> graf[Nmax];
priority_queue < pair <int,int>, vector <pair <int,int> >, greater< pair<int,int> >>low_cost;
bitset <200100> varf;
int n,m;

void read()
{
    freopen("apm.in","r",stdin);
    freopen("apm.out","w",stdout);
    scanf("%d %d",&n,&m);
    int x,y,c;
    for(int i = 0 ; i < m ; i++)
    {
        scanf("%d %d %d",&x,&y,&c);
        graf[x].push_back(make_pair(c,y));
        graf[y].push_back(make_pair(c,x));
    }
}

void apm(int start)
{
    low_cost.push(make_pair(0,1));
    tatal[start] = 1;
    cost[start] = 0;
    while(!low_cost.empty())
    {
        int x = low_cost.top().second;
        int cost2 = low_cost.top().first;
        varf[start]= true;
        low_cost.pop();
        for(vector<pair<int,int>>::iterator it = graf[x].begin(); it != graf[x].end() ; it++)
            if(varf[it->second] == false && cost2  > cost[it->second])
            {
                low_cost.push(make_pair(it->first,it->second));
                tatal[it->second] = x;
                cost[it->second] = cost2;
            }
    }
}

int main()
{
    read();
    apm(1);
    return 0;
}