Pagini recente » Istoria paginii runda/igorj_2 | Istoria paginii runda/simulare-cartita-52b/clasament | Cod sursa (job #243531) | Cod sursa (job #1142092) | Cod sursa (job #1277239)
#include <cstdio>
#include <algorithm>
#define Nmax 30005
using namespace std;
struct el
{
int x,y,cost;
bool operator <(const el &A) const
{
return cost<A.cost;
}
};
el v[Nmax];
int t[Nmax];
bool viz[Nmax];
struct Edge
{
int nod,cost;
};
vector <Edge> L[Nmax];
inline void Unite(int a, int b)
{
t[a]+=t[b]; t[b]=a;
}
inline int Find(int a)
{
int rad,i=a;
while(a>0)
a=t[a];
rad=a;
while(i>0)
{
a=t[i];
t[i]=rad;
i=a;
}
return rad;
}
int main()
{
int x,y,i,k;
Edge w;
freopen ("radiatie.in","r",stdin);
freopen ("radiatie.out","w",stdout);
scanf("%d%d%d", &n,&m,&k);
for(i=1;i<=m;++i)
scanf("%d%d%d", &v[i].x,&v[i].y,&v[i].cost);
sort(v+1,v+m+1);
for(i=1;i<=n;++i) t[i]=-1;
for(i=1;i<=n;++i)
{
x=Find(v[i].x); y=Find(v[i].y);
if(x!=y)
{
Unite(x,y);
viz[i]=true;
}
}
for(i=1;i<=n;++i) L[i].clear();
for(i=1;i<=n;++i)
if(viz[i])
{
w.nod=v[i].y; w.cost=v[i].cost;
L[v[i].x].push_back(w);
}
return 0;
}