Pagini recente » Cod sursa (job #699091) | Cod sursa (job #1857663) | Cod sursa (job #2800655) | Cod sursa (job #719868) | Cod sursa (job #1709207)
#include<cstdio>
#include<algorithm>
#include<set>
#define MAXM 500010
#define MAXN 250010
using namespace std;
struct edge{int x,y,t,c;};
edge edges[MAXM];
int h[MAXN],dad[MAXN];
set<int> solution;
set<int>::iterator it;
bool cmp(edge a,edge b){
if(a.t<b.t)
return true;
if(a.t>b.t)
return false;
if(a.c<b.c)
return true;
return false;
}
int findDad(int node){
if(dad[node]==node)
return node;
return dad[node]=findDad(dad[node]);
}
int main(){
freopen("politie.in","r",stdin);
freopen("politie.out","w",stdout);
int n,m,d,p,i,x,y,dadx,dady;
scanf("%d%d%d%d",&n,&m,&d,&p);
for(i=1;i<=n;i++){
dad[i]=i;
h[i]=1;
}
for(i=1;i<=m;i++)
scanf("%d%d%d%d",&edges[i].x,&edges[i].y,&edges[i].t,&edges[i].c);
sort(edges+1,edges+m+1,cmp);
for(i=1;i<=n;i++){
x=edges[i].x;
y=edges[i].y;
dadx=findDad(x);
dady=findDad(y);
if(dadx==dady)
continue;
solution.insert(-edges[i].c);
if(h[dadx]>h[dady])
dad[dady]=dadx;
else
if(h[dadx]<h[dady])
dad[dadx]=dady;
else{
dad[dady]=dadx;
h[dadx]++;
}
}
for(it=solution.begin(),i=1;it!=solution.end()&&i<=p;i++,it++)
printf("%d\n",-*it);
return 0;
}