Pagini recente » Cod sursa (job #141161) | Cod sursa (job #2430627) | Cod sursa (job #1506825) | Cod sursa (job #2520430) | Cod sursa (job #2676829)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("grafpond.in");
struct muchii
{
int l, c, cost;
};
const int NMAX = 1000001;
int n, m;
vector<int> A[NMAX];
bool viz[NMAX];
muchii M[NMAX], sol[NMAX];
void citire()
{
f >> n >> m;
for(int i = 0; i < m; i++)
f >> M[i].l >> M[i].c >> M[i].cost;
}
void sortare_muchii()
{
for(int i = 0; i < m - 1; i++)
for(int j = i + 1; j < m; j++)
if(M[i].cost > M[j].cost)
{
int aux = M[i].cost;
M[i].cost = M[j].cost;
M[j].cost = aux;
//
aux = M[i].c;
M[i].c = M[j].c;
M[j].c = aux;
//
aux = M[i].l;
M[i].l = M[j].l;
M[j].l = aux;
}
}
void DFS(int nod)
{
viz[nod] = 1;
for(int i = 0; i < A[nod].size(); i++)
if(viz[A[nod][i]] == 0)
DFS(A[nod][i]);
}
int main()
{
citire();
///sortam muchiile grafului crescător după cost
sortare_muchii();
int S = 0, cnt = 0;
for(int i = 0; i < m ; i++)
{
int nod_start = M[i].l;
DFS(nod_start);
if (viz[M[i].c] == 0)
{
S += M[i].cost;
cnt++;
cout << '(' << M[i].l << ", " << M[i].c << ", " << M[i].cost << ')' << '\n';
A[M[i].l].push_back(M[i].c);
A[M[i].c].push_back(M[i].l);
}
}
cout << "Suma costurilor = " << S;
return 0;
}