Twoim zadaniem jest wyznaczenie kosztu minimalnego drzewa spinającego grafu nieskierowanego, podanego na wejściu.. Graf ma n wierzchołków (1≤n≤7000) i m krawędzi (1≤m≤300000). Obie liczby podane są w pierwszym wierszu danych.
W kolejnych m wierszach znajdują się opisy krawędzi grafu w postaci trzech liczb a,b,c (oddzielonych spacjami), gdzie 1≤a,b≤n, 1≤c≤100000 oznaczają, że krawedź (a,b) kosztuje c.
mój program wygląda tak i nie działa dla większości testów, proszę o pomoc
#include<iostream>
#include<algorithm>
#include <vector>
#include<queue>
using namespace std;
vector<int> g[7001];
bool od[7001];
int n,m,licznik,wynik;
int t[7001];
queue <int> v;
struct sortowanie
{int w1;
int krawedz;
int w2;
bool operator < (const sortowanie &x)const //zdefiniowanie zachowania si�
{ //operatora < potrzebnego przy sortowaniu
return krawedz>x.krawedz;
}
};
sortowanie tab[300001];
void bfs(int k)
{ int a,b,c;
if(t[tab[licznik].w2]==-1) t[tab[licznik].w2]=tab[licznik].w1;
c=t[tab[licznik].w2];
od[k]=1;
v.push(k);
t[k]=c;
while (!v.empty())
{a=v.front();
v.pop();
for (int i=0; i<g[a].size(); i++ )
{b=g[a][i];
if(od[b]==0)
{v.push(b);
t[b]=c;
od[b]=1;
}
}
}
}
void wczyt()
{cin>>n>>m;
licznik=0;
int a,b,c;
for(int i=0;i<m;i++)
{cin>>a>>b>>c;
//g[a].push_back(make_pair(b,c));
//g[b].push_back(make_pair(a,c));
tab[licznik].w2=a;
tab[licznik].krawedz=c;
tab[licznik].w1=b;
licznik++;
}
}
int policz()
{ //int ww1,ww2;
wynik=0;
for(int y=0;y<=n+1;y++)
{
licznik--;
//cout<<"numer"<<t[tab[licznik].w1]<<" "<<t[tab[licznik].w2];
if(t[tab[licznik].w1]!=t[tab[licznik].w2]||t[tab[licznik].w2]==-1||t[tab[licznik].w1]==-1)
{wynik=wynik+tab[licznik].krawedz;
//cout<<"krawedzie"<<tab[licznik].w1<<" "<<tab[licznik].w2<<"wynik"<<wynik<<endl;
g[tab[licznik].w1].push_back(tab[licznik].w2);
g[tab[licznik].w2].push_back(tab[licznik].w1);
bfs(tab[licznik].w1);
}
}
return wynik;
}
void zeruj()
{for(int i=1;i<=n;i++) t[i]=-1;
}
int main()
{wczyt();
sort(tab,tab+licznik);
zeruj();
cout<<policz()<<endl;
system("pause");
}
Shalom