Pagini recente » Cod sursa (job #1735563) | Cod sursa (job #1476511) | Cod sursa (job #31267) | Cod sursa (job #2776489) | Cod sursa (job #2821938)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("lazy.in");
ofstream g ("lazy.out");
int n;
int m;
struct drum
{
int x;
int y;
long long c1;
long long c2;
int index;
};
drum a[200005];
int cmp(drum A , drum B)
{
if(A.c1<B.c1)
return 1;
if(A.c1==B.c1 && A.c2>B.c2)
return 1;
return 0;
}
int parinte[200005];
int Find(int x)
{
int aux=x;
while(parinte[aux]!=0)
aux=parinte[aux];
while(parinte[x]!=0)
{
int aux2=x;
x=parinte[x];
parinte[aux2]=aux;
}
return aux;
}
void Union(int x , int y)
{
parinte[x]=y;
}
int main()
{
f>>n>>m;
for(int i=1;i<=m;++i)
{
f>>a[i].x>>a[i].y>>a[i].c1>>a[i].c2;
a[i].index=i;
}
sort(a+1 , a+m+1 , cmp);
int bagate=0;
vector <int> v;
for(int i=1;bagate<n && i<=m;++i)
{
int par1=Find(a[i].x);
int par2=Find(a[i].y);
if(par1!=par2)
{
Union(par1 , par2);
v.push_back(a[i].index);
}
}
for(int i=0;i<v.size();++i)
g<<v[i]<<"\n";
return 0;
}