Pagini recente » Cod sursa (job #2753200) | Cod sursa (job #1726928) | Cod sursa (job #2846434) | Cod sursa (job #487446) | Cod sursa (job #2842162)
#include <iostream>
#include <vector>
#include <fstream>
#define NMAX 200010
#define MMAX 400010
#define inf 2100000000
#define pb push_back
#define mkp make_pair
using namespace std;
ifstream fin(".in");
ofstream fout(".out");
struct arb{
int nod,val;
}heap[NMAX];
int n,m,lheap;
int poz[NMAX],viz[NMAX];//poz in heap
void introd_heap(int node,int valoare)
{
lheap++;
heap[lheap].nod=node;
heap[lheap].val=valoare;
poz[node]=lheap;//initializam in heap primul nod si retinem pozitia lui in heap
}
void upheap(int p,int valoare)
{
int index=p;
heap[index].val=valoare;
while(index/2>=1 && heap[index]<heap[index/2])
{
//urcam nodul cat mai sus cat timp este mai mic decat parintele
swap(poz[heap[index].nod],poz[heap[index/2].nod]);
swap(heap[index],heap[index/2]);
index=index/2;
}
}
void downHeap()
{
int index=1;
while(2*index<=lheap)
{
int minIndex=index;
//stabilim minimul intre stanga si dreapta(daca exista)
if(heap[2*index]<heap[index])
{
minIndex=2*index;
}
if(2*index+1<=lheap && heap[2*index+1]<heap[minIndex])
minIndex=2*index+1;
if(minIndex!=index)
{
swap(poz[heap[index].nod],poz[heap[minIndex]].nod);
swap(heap[index],heap[minIndex]);
index=minIndex;
}
else
index=lheap*4;//stop
}
}
arb getEilmVarf()
{
arb x=heap[1];
poz[heap[lheap].nod]=1;
//heap[1].nod=heap[lheap].nod;
//heap[1].val=heap[lheap].val;
swap(heap[1],heap[lheap]);
lheap--;
downHeap();
return x;
}
long long cost;
vector <pair<int,int>> muc[NMAX];
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y,c;
fin>>x>>y>>c;
muc[x].pb(mkp(y,c));
muc[y].pb(mkp(x,c));
}
introd_heap(1,0);
for(int i=2;i<=n;i++)
introd_heap(i,inf);//initializam toate celelalte noduri in heap cu inf
for(int i=1;i<n;i++)
{
arb xmin=getElimVarf();
cost+=xmin.val;
viz[xmin.nod]=1;
for(int i=0;i<muc[xmin.nod].size();i++)
{
int dest;
if(viz[]==0 && heap[poz].val>muchie.val)
}
}
return 0;
}