Pagini recente » Cod sursa (job #3248924) | Cod sursa (job #2500705) | Cod sursa (job #2535541) | Cod sursa (job #651465) | Cod sursa (job #2833092)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("politie.in");
ofstream fout("politie.out");
const int MAX=500005;
int n,m,d,p,cnt,t[MAX],rang[MAX],per[MAX],last;
struct T{int a,b,cat,per;}v[MAX];
bool cmp(T x, T y)
{
if(x.cat==y.cat)
return x.per<y.per;
return x.cat<y.cat;
}
int root(int x)
{
while(x!=t[x])
x=t[x];
return x;
}
void uneste(int x, int y)
{
if(rang[x]>rang[y])
t[y]=x;
if(rang[y]>rang[x])
t[x]=y;
if(rang[x]==rang[y])
{
t[y]=x;
rang[x]++;
}
}
int main()
{
fin >> n >> m >> d >> p;
for(int i=1;i<=m;i++)
fin >> v[i].a >> v[i].b >> v[i].cat >> v[i].per;
for(int i=1;i<=n;i++)
t[i]=i;
sort(v+1,v+m+1,cmp);
for(int i=1;cnt<n-1;i++)
{
int rx=root(v[i].a);
int ry=root(v[i].b);
if(rx!=ry)
{
per[++cnt]=v[i].per;
uneste(rx,ry);
}
}
sort(per+1,per+n);
for(int i=n-1,j=p;j;i--)
if(per[i]!=last)
{
fout << per[i] << '\n';
last=per[i];
j--;
}
return 0;
}