Pagini recente » Cod sursa (job #2560918) | Cod sursa (job #2052318) | Cod sursa (job #476741) | Cod sursa (job #3120870) | Cod sursa (job #1709711)
#include <vector>
#include <algorithm>
#include <fstream>
#define NMax 250010
#define MMax 500010
using namespace std;
ifstream fin("politie.in");
ofstream fout("politie.out");
struct Edge{
int n1,n2,t,c;
bool operator< (const Edge a) const{
return t != a.t ? t<a.t : c<a.c;
}
};
Edge e[MMax];
int p[NMax];
vector<int> P;
int _find(int a)
{
if(p[a]==0)
return a;
return (p[a]=_find(p[a]));
}
void _union(int a,int b)
{
p[_find(a)] = _find(b);
}
void think(Edge a)
{
if(_find(a.n1)!=_find(a.n2))
{
_union(a.n1,a.n2);
P.push_back(a.c);
}
}
bool comp(int a,int b)
{
return a>b;
}
int main()
{
int n,m,d,x;
fin>>n>>m>>d>>x;
for(int i=1;i<=m;i++)
{
fin>>e[i].n1>>e[i].n2>>e[i].t>>e[i].c;
}
sort(e+1,e+m+1);
for(int i=1;i<=m;i++)
{
think(e[i]);
}
sort(P.begin(),P.end(),comp);
int nr=0;
for(int i=0; nr<x; i++)
{
while(i>0 && P[i]==P[i-1])
i++;
fout<<P[i]<<'\n';
nr++;
}
return 0;
}