Pagini recente » Cod sursa (job #2367237) | Cod sursa (job #1143495) | Cod sursa (job #1705684) | Cod sursa (job #341110) | Cod sursa (job #2351310)
#include <cstdio>
#include <queue>
#define N 250002
#include <set>
using namespace std;
FILE *f,*g;
struct bla
{
int x,y,c,p;
};
struct compar
{
bool operator () (bla A, bla B)
{
if(A.c!=B.c)
return (A.c>B.c);
return (A.p>B.p);
}
};
priority_queue < bla, vector <bla>, compar > q;
int tata[N],rang[N];
struct cmp
{
bool operator() (int A, int B)
{
return (A>B);
}
};
set <int,cmp> sol;
set <int> :: iterator it;
int root(int nod)
{
while(nod!=tata[nod])
nod=tata[nod];
return nod;
}
void unite(int ma, int mb)
{
if(rang[ma]<rang[mb])
tata[ma]=mb;
else
tata[mb]=ma;
if(rang[ma]==rang[mb])
++rang[ma];
}
int main()
{
f=fopen("politie.in","r");
g=fopen("politie.out","w");
int cat,k,n,m,a,b,ma,mb;
fscanf(f,"%d %d %d %d",&n,&m,&cat,&k);
bla val;
for(int i=1;i<=m;++i)
{
fscanf(f,"%d %d %d %d",&val.x,&val.y,&val.c,&val.p);
q.push(val);
}
for(int i=1;i<=n;++i)
tata[i]=i;
int nr=1;
for(int i=1;i<=m;++i)
{
val=q.top();
q.pop();
a=val.x;
b=val.y;
ma=root(a);
mb=root(b);
if(ma!=mb)
{
unite(ma,mb);
sol.insert(val.p);
}
}
for(it=sol.begin();it!=sol.end();++it)
if(nr<=k)
fprintf(g,"%d\n",(*it));
else
{
break;
}
fclose(f);
fclose(g);
return 0;
}