Pagini recente » Cod sursa (job #1651920) | Cod sursa (job #305739) | Cod sursa (job #3178349) | Cod sursa (job #3039218) | Cod sursa (job #1709298)
/*************************************************************\
~*********************ENJOY THE SILENCE***********************~
\*************************************************************/
#include <bits/stdc++.h>
using namespace std;
/*******************Debugging defines*************************/
#define ok_dump() cerr<<"OK\n"
#define var_dump(x) cerr<<#x": "<<x<<'\n'
#define arr_dump(x, n) {cerr<<#x"[]: ";\
for(int _=0;_<n;++_) cerr<<x[_]<<" ";cerr<<'\n';}
/*************************************************************/
struct Edge {
int u, v, cat, dang;
Edge(int a, int b, int c, int d) :
u(a), v(b), cat(c), dang(d) {}
};
int Link[500000];
int Find(int a) {
if(Link[a])
return Link[a] = Find(Link[a]);
return a;
}
void Union(int a, int b) {
Link[Find(a)] = Find(b);
}
set<int> Set;
int main() {
// assert(freopen("input.txt", "r", stdin));
ios_base::sync_with_stdio(false);
cin.tie(NULL);
ifstream fin("politie.in");
ofstream fout("politie.out");
int n, m, d, p;
fin >> n >> m >> d >> p;
vector<Edge> Edges;
Edges.reserve(m);
while(m--) {
int a, b, c, d;
fin >> a >> b >> c >> d;
Edges.emplace_back(a, b, c, d);
}
sort(Edges.begin(), Edges.end(), [](const Edge &a, const Edge &b) {
if(a.cat == b.cat) return a.dang < b.dang;
return a.cat < b.cat;
});
for(auto &x : Edges) {
if(Find(x.u) != Find(x.v)) {
Union(x.u, x.v);
Set.insert(-x.dang);
}
}
for(auto pr : Set) {
if(p == 0) return 0;
fout << -pr << '\n';
--p;
}
}
/*************************************************************\
~*********************ENJOY THE SILENCE***********************~
\*************************************************************/