Pagini recente » Cod sursa (job #1392078) | Cod sursa (job #2146736) | Cod sursa (job #823262) | Cod sursa (job #1946489) | Cod sursa (job #3163384)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
//kruskal
const int NMAX=400000;
struct muchie{
int x,y,c;
};
muchie a[NMAX+1];
int h[NMAX+1],d[NMAX+1]; //h - rang,d - tata
bool cmp(muchie &p,muchie &q)
{
return p.c<q.c;
}
void Union(int x,int y)
{
if(h[x]>h[y]) d[y]=x;
else
{
d[x]=y;
if(h[x]==h[y]) d[y]++;
}
}
int Find(int x)
{
int r, y, t;
r=x;
while(d[r] != r) {
cout << r << ' ' << d[r] << '\n';
r=d[r];
}
y=x;
while(y!=r)
{
t=d[y];
d[y]=r;
y=t;
}
return r;
}
int main()
{
int n,m,s=0; vector<muchie> sol;
ifstream f("apm.in");
ofstream g("apm.out");
f>>n>>m;
cout<<n<<m<<endl;
for(int i=1;i<=n;i++)
{
h[i]=1; d[i]=i;
}
for(int i=1;i<=m;i++)
f>>a[i].x>>a[i].y>>a[i].c;
sort(a+1,a+m+1,cmp);
for(int i=1;i<=m;i++)
{
cout << a[i].x << ' ' << a[i].y << '\n';
int p=Find(a[i].x);
int q=Find(a[i].y);
//cout<<p<<" "<<q<<endl;
if(p!=q)
{
s=s+a[i].c;
sol.push_back(a[i]);
Union(p,q);
}
}
cout<<s<<endl;
cout<<n-1<<endl;
//for(int i=0;i<n-1;i++)
// cout<<sol[i].x<<" "<<sol[i].y<<endl;
return 0;
}