Pagini recente » Cod sursa (job #2963649) | Cod sursa (job #2560065) | Cod sursa (job #303231) | Cod sursa (job #303255) | Cod sursa (job #3262518)
#include <bits/stdc++.h>
using namespace std;
ifstream f("date.in");
///arborele partial de cost minim
struct muchii{
int st;
int dr;
int c;
};
void fil(vector<int>&x,int val1,int val2)
{for(auto &i:x)
if(i==val1)
i=val2;
}
void sortare(vector<muchii>&x,int st,int dr)
{if(st<dr)
{int m=(st+dr)/2;
muchii aux=x[st];
x[st]=x[m];
x[m]=aux;
int i=st,j=dr,d=0;
while(i<j)
{if(x[i].c>x[j].c ||(x[i].c==x[j].c && x[i].st>x[i].dr)||(x[i].c==x[j].c &&x[i].st==x[j].st &&x[i].dr>x[j].dr))
{aux=x[i];
x[i]=x[j];
x[j]=aux;
d=1-d;
}
i+=d;
j-=1-d;
}sortare(x,st,i-1);
sortare(x,i+1,dr);
}
}
int main()
{int n,m,s,d,cost;
f>>n>>m;
vector<muchii>x(m+1);
for(int i=1;i<=m;i++)
{f>>s>>d>>cost;
x[i].st=s;
x[i].dr=d;
x[i].c=cost;
}
sortare(x,1,m);
vector<int>v(n+1);
for(int i=1;i<=n;i++)
v[i]=i;
vector<bool>luat(m+1,false);
int nr=0;
for(int i=1;i<=m;i++)
{if(v[x[i].st]!=v[x[i].dr])
{nr++;
luat[i]=true;
if(v[x[i].st]<v[x[i].dr])
fil(v,v[x[i].dr],v[x[i].st]);
else fil(v,v[x[i].st],v[x[i].dr]);
}if(nr==n-1)
break;
}for(int i=1;i<=m;i++)
if(luat[i])
cout<<x[i].st<<" "<<x[i].dr<<"\n";
}