#include #include #include #include #include #include #include #include using namespace std; const int MaxN = 10000; const int MaxQ = 100; int input[MaxN][MaxN]; int chiaveMin(int key[], bool mstSet[], int nodi){ int min = INT_MAX, min_index; for(int i=0; i < nodi; i++){ if(mstSet[i] == false && key[i] < min) min = key[i], min_index = i; } return min_index; } int findParentMaxWeight(int parent[],int nodi,int find, int ami){ int max=-1; for(int i=1; i < nodi; i++){ if(parent[i] == find && input[i][parent[i]] > max) max = input[i][parent[i]]; if(parent[i] == find && i == ami) return input[i][parent[i]]; } return max; } int main(int argc, char *argv[]) { ifstream fin("input/input0.txt"); ofstream fout("output.txt"); int nodi, archi, q_archi; fin >> nodi >> archi >> q_archi; // cout << "N: " << nodi << " M: " << archi << " Q: " << q_archi << endl; int input_row[q_archi][2]; int input_peso[q_archi]; int diffs[q_archi]; for(int i = 0 ; i < nodi; i++) for(int l=0; l < nodi; l++) input[i][l] = 0; int nodoA=0; int nodoB=0; int peso=0; for(int i = 0 ; i < archi; i++){ fin >> nodoA >> nodoB; fin >> peso; input[nodoA-1][nodoB-1]= peso; input[nodoB-1][nodoA-1] = peso; if(i < q_archi){ input_row[i][0]=nodoA-1; input_row[i][1]=nodoB-1; input_peso[i]=peso; } } // prim int parent[nodi]; int key[nodi]; bool mstSet[nodi]; for(int i=0; i < nodi; i++) key[i] = INT_MAX, mstSet[i] = false; key[0]=0; parent[0]=-1; for(int c = 0; c < nodi-1; c++){ int u = chiaveMin(key,mstSet,nodi); mstSet[u] = true; for(int v = 0; v < nodi; v++) if(input[u][v] && mstSet[v] == false && input[u][v] < key[v]) parent[v] = u, key[v]= input[u][v]; } int somma=0; for(int i=1; i < nodi; i++){ // printf("%d - %d %d\n",parent[i]+1, i+1, input[i][parent[i]]); somma+=input[i][parent[i]]; } fout << somma <