Pagini recente » Cod sursa (job #1448098) | Cod sursa (job #1830820) | Cod sursa (job #1345294) | Cod sursa (job #2088973) | Cod sursa (job #587390)
Cod sursa(job #587390)
#include<stdio.h>
#include<malloc.h>
#include<algorithm>
using namespace std;
typedef struct
{
int x;
int y;
long long cost;
long long val;
int poz;
} xy;
xy M[200100];
int n;
int m;
int L[200101];
int grad[200101];
bool cmp(xy a,xy b){
if (a.cost != b.cost)
return a.cost < b.cost;
return a.val > b.val;
}
void citire(void)
{
FILE *f = fopen("lazy.in","r");
fscanf(f,"%d %d",&n,&m);
for(int i=1;i<=m;i++)
{
fscanf(f,"%d %d %d %d",&M[i].x,&M[i].y,&M[i].cost,&M[i].val);
M[i].poz = i;
}
fclose(f);
}
void complet(void)
{
for(int i=1;i<=m;i++)
L[i] = i;
}
int rad(int n)
{
if(L[n] == n)
return n;
return rad(L[n]);
}
void unire(int i,int j)
{
i = rad(i);
j = rad(j);
if(grad[i]>grad[j])
L[j] = i;
else
L[i] = j;
if(grad[i] == grad[j])
grad[i] ++;
}
void kruscal(void)
{
FILE *f = fopen("lazy.out","w");
int nr = 0;
for(int k = 1;nr<n-1;k++)
if(rad(M[k].x) != rad(M[k].y))
{
fprintf(f,"%d \n",M[k].poz);
unire(M[k].x,M[k].y);
nr ++;
}
fclose(f);
}
int main()
{
citire();
sort(M+1,M+m+1,cmp);
complet();
// kruscal();
return 0;
}