Pagini recente » Romanii medaliati la IOI | Cod sursa (job #1718174) | Cod sursa (job #2854161) | Cod sursa (job #147344) | Cod sursa (job #541629)
Cod sursa(job #541629)
#include <fstream>
#include <limits>
using namespace std;
long n,m;
typedef struct{
long x,y,c1,c2,nro;
}muchie;
muchie a[10000];
void citire()
{
int x,y,ca,cb,i;
ifstream f("lazy.in");
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y>>ca>>cb;
a[i].x=x;
a[i].y=y;
a[i].c1=ca;
a[i].c2=cb;
a[i].nro=i;
}
}
long partitie(muchie a[],long st,long dr)
{
long v=a[st].c1;
--st;
++dr;
while(st<dr)
{
do
{
--dr;
}while(st<dr&&a[dr].c1>v);
do
{
++st;
}while(st<dr&&a[st].c1<v);
if(st<dr)
{
muchie tmp=a[st];
a[st]=a[dr];
a[dr]=tmp;
}
}
return dr;
}
void quicksort(muchie a[],int st,int dr)
{
if(st<dr)
{
long p=partitie(a,st,dr);
quicksort(a,st,p);
quicksort(a,p+1,dr);
}
}
void kruskal()
{
long arb[10000];
long apm[10000];
int i,j,k=0;
for(i=1;i<=n;i++)
arb[i]=i;
for(i=1;i<=m;i++)
{
if(arb[a[i].x]!=arb[a[i].y])
{
long aux;
if(arb[a[i].x]<arb[a[i].y])
{
aux=arb[a[i].y];
for(j=1;j<=n;j++)
{
if(arb[j]==aux) arb[j]=arb[a[i].x];
}
}
else
{
aux=arb[a[i].x];
for(j=1;j<=n;j++)
{
if(arb[j]==aux) arb[j]=arb[a[i].y];
}
}
k++;
apm[k]=a[i].nro;
}
}
ofstream g("lazy.out");
for(i=1;i<=k;i++)
g<<apm[i]<<"\n";
}
int main()
{
citire();
quicksort(a,1,m);
kruskal();
return 0;
}