Pagini recente » Cod sursa (job #2361501) | Cod sursa (job #498550) | Cod sursa (job #3170456) | Cod sursa (job #1109107) | Cod sursa (job #1711178)
#include <cstdio>
#include <algorithm>
#include <set>
using namespace std;
#define MAXM 500000
#define MAXN 250000
set <int> S;
struct Muchie{
int x,y,tip,grad;
};
Muchie V[MAXM];
int sef[MAXM+1];
bool cmp(Muchie a,Muchie b){
if(a.tip==b.tip)
return a.grad<b.grad;
return a.tip<b.tip;
}
int find_sef(int nod){
if(sef[nod]==0)
return nod;
return sef[nod]=find_sef(sef[nod]);
}
int G[MAXN+1];
int main(){
FILE*fi,*fout;
int n,m,d,p,i,con;
fi=fopen("politie.in" ,"r");
fout=fopen("politie.out" ,"w");
fscanf(fi,"%d%d%d%d" ,&n,&m,&d,&p);
for(i=0;i<m;i++)
fscanf(fi,"%d%d%d%d" ,&V[i].x,&V[i].y,&V[i].tip,&V[i].grad);
sort(V,V+m,cmp);
con=i=0;
while(con<n-1){
if(find_sef(V[i].x)!=find_sef(V[i].y)){
G[con]=V[i].grad;
con++;
sef[find_sef(V[i].x)]=find_sef(V[i].y);
}
i++;
}
sort(G,G+con);
i=con-1;
con=0;
while(con<p){
if(S.find(G[i])==S.end()){
fprintf(fout,"%d\n" ,G[i]);
S.insert(G[i]);
con++;
}
i--;
}
fclose(fi);
fclose(fout);
return 0;
}