Cod sursa(job #465680)

Utilizator S7012MYPetru Trimbitas S7012MY Data 25 iunie 2010 11:48:10
Problema Mesaj4 Scor 0
Compilator cpp Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 1 Marime 1.3 kb
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
#define DM 400001

int x[DM],y[DM],cost[DM],ind[DM],n,m,gr[DM],tcost;
vector<int> sol;

int gaseste(int i) {
    if(gr[i]==i) return i;
    gr[i]=gaseste(gr[i]);
    return gr[i];
}

void reuniune(int i,int j) {
    gr[gaseste(i)]=gaseste(j);
}

bool cmp(int i,int j) {//pentru sortarea indicilor in functie de cost
	return(cost[i] < cost[j]);
}

int main()
{
    int i;
    freopen("mesaj4.in","r",stdin);
    freopen("mesaj4.out","w",stdout);
    /*scanf("%d %d",&n,&m);
    for(i=1; i<=m; i++) {
        scanf("%d %d %d",&x[i],&y[i],&cost[i]);
        ind[i]=i;
    }
    for(i=1; i<=n; i++) gr[i]=i;
    sort(ind+1,ind+m+1,cmp);//sortam indicii crescator in functie de costuri
    for(i=1;i<=m; i++) //pentru fiecare muchie x,y in ordinea crescatoare a costului
        if(gaseste(x[ind[i]])!=gaseste(y[ind[i]])) {
            tcost+=cost[ind[i]];
            reuniune(x[ind[i]],y[ind[i]]);//se adauga muchia arborelui
            sol.push_back(ind[i]);
        }
    if(tcost!=-1) {
        printf("%d\n",tcost*2);
        for(i=0; i<n-1; i++) printf("%d %d\n",x[sol[i]],y[sol[i]]);
        for(i=0; i<n-1; i++) printf("%d %d\n",y[sol[i]],x[sol[i]]);
    }
    else*/ printf("-1\n");
    return 0;
}