Pagini recente » Cod sursa (job #1229094) | Cod sursa (job #1517421) | Autentificare | Cod sursa (job #2723147) | Cod sursa (job #1711551)
#include <cstdio>
#include <algorithm>
#include <set>
using namespace std;
set<int> Set;
set<int> :: iterator it;
const int N=250005;
const int Size=65536;
int i, n,m, P, X,Y, p, t[N];
struct ss{int x,y,c,p;};
ss a[N<<1];
char Buffer[Size+5];
int boss(int x)
{
if(x==t[x]) return x;
return t[x]=boss(t[x]);
}
bool cmp(ss a, ss b)
{
if(a.c==b.c) return (a.p<b.p);
return (a.c<b.c);
}
bool cifra(char c) {return (c>='0' && c<='9');}
int gi()
{
while(!cifra(Buffer[p]))
{
++p;
if(p==Size) fread(Buffer, Size, 1, stdin), p=0;
}
int nr=0;
while(cifra(Buffer[p]))
{
nr=nr*10+Buffer[p]-'0';
++p;
if(p==Size) fread(Buffer, Size, 1, stdin), p=0;
}
return nr;
}
int main()
{
freopen("politie.in", "r", stdin);
freopen("politie.out", "w", stdout);
fread(Buffer, Size, 1, stdin);
n=gi(); m=gi(); X=gi(); P=gi();
for(i=1; i<=m; ++i)
{
a[i].x=gi();
a[i].y=gi();
a[i].c=gi();
a[i].p=gi();
}
sort(a+1, a+m+1, cmp);
for(i=1; i<=n; ++i) t[i]=i;
for(i=1; i<=m; ++i)
{
X=boss(a[i].x);
Y=boss(a[i].y);
if(X!=Y)
{
Set.insert(a[i].p);
t[X]=Y;
}
}
for(it=Set.end(); P; --P)
{
it--;
printf("%d\n", *it);
}
return 0;
}