Pagini recente » Cod sursa (job #1073505) | Cod sursa (job #949142) | Cod sursa (job #1823791) | Cod sursa (job #633723) | Cod sursa (job #1705166)
#include <iostream>
#include <fstream>
#include <vector>
#include <utility> //pt pair
#include <set> //ca sa pastram sortat perechile
using namespace std;
struct comparare
{
bool operator()(const pair<pair<int,int>, int>&i, const pair<pair<int,int>, int>&j)
const{
if(i.second<j.second)
return 1;
else if(i.second==j.second)
return 1;
return 0;
}
};
multiset<pair< pair<int,int>,int>,comparare> date,apcm;
multiset<pair< pair<int,int>,int> > ::iterator it;
vector<int>::iterator v_it;
int main()
{
int N,M,x,y,z,muchie_cost_minim;
pair<int,int> temp;
ifstream f("apm.in");
ofstream g("apm.out");
f>>N>>M;
vector<int> culori_componente;
for(int i=0;i<=N;i++)
{
culori_componente.push_back(i);
}
for(int i=1;i<=M;i++)
{
f>>x>>y>>z;
temp=make_pair(x,y);
date.insert(make_pair(temp,z));
}
/// for(it=date.begin();it!=date.end();++it)
/// cout<<(*it).first.first<<" "<<(*it).first.second<<"\n";
///KRUSKAL
for(it=date.begin();it!=date.end();++it)
{
muchie_cost_minim=(*it).second;
x=(*it).first.first;
y=(*it).first.second;
if(culori_componente[x]!=culori_componente[y])
{
if(culori_componente[x]<culori_componente[y])
{
for(v_it=culori_componente.begin();v_it!=culori_componente.end();v_it++)
if(*v_it==culori_componente[y])
*v_it=culori_componente[x];
}
else
{
for(v_it=culori_componente.begin();v_it!=culori_componente.end();v_it++)
if(*v_it==culori_componente[x])
*v_it=culori_componente[y];
}
apcm.insert(make_pair(make_pair(y,x),muchie_cost_minim));
}
}
///AFISARE COST APCM
int cost_apcm=0,NUMAR_MUCHII_APCM=0;
for(it=apcm.begin();it!=apcm.end();++it)
{
cost_apcm+=(*it).second;
NUMAR_MUCHII_APCM++;
}
g<<cost_apcm<<endl;
///MUCHII ARBORE APCM
g<<NUMAR_MUCHII_APCM<<endl;
///LISTARE MUCHII
for(it=apcm.begin();it!=apcm.end();++it)
g<<(*it).first.first<<" "<<(*it).first.second<<endl;
return 0;
}