Pagini recente » Cod sursa (job #896055) | Cod sursa (job #727405) | Cod sursa (job #3260059) | Cod sursa (job #2779312) | Cod sursa (job #1714422)
#include <stdio.h>
#include <algorithm>
#define nod 250005
#define muchie 500005
using namespace std;
struct elem{int x,y,tip,grad;};
elem v[muchie];
int t[nod],rasp[nod];
bool cmp(elem a,elem b){
if(a.tip==b.tip)
return a.grad<b.grad;
return a.tip<b.tip;
}
int my_find(int val){
if(t[val]==val)
return val;
else
return t[val]=my_find(t[val]);
}
void my_union(int val1,int val2){
int boss1=my_find(val1);
int boss2=my_find(val2);
t[boss1]=boss2;
}
int main(){
FILE *fin,*fout;
fin=fopen("politie.in","r");
fout=fopen("politie.out","w");
int i,j,n,m,k,p,q;
fscanf(fin,"%d%d%d%d",&n,&m,&q,&p);
for(i=1;i<=m;i++)
fscanf(fin,"%d%d%d%d",&v[i].x,&v[i].y,&v[i].tip,&v[i].grad);
sort(v+1,v+m+1,cmp);
for(i=1;i<=n;i++)
t[i]=i;
for(i=1,k=0;i<=m;i++)
if(my_find(v[i].x)!=my_find(v[i].y)){
k++;
rasp[k]=v[i].grad;
my_union(v[i].x,v[i].y);
}
sort(rasp+1,rasp+k+1);
for(i=k,j=0;i>=1&&j<p;i--)
if(rasp[i]!=rasp[i+1]){
fprintf(fout,"%d\n",rasp[i]);
j++;
}
fclose(fin);
fclose(fout);
return 0;
}