Pagini recente » Cod sursa (job #1116544) | Cod sursa (job #1728224) | Cod sursa (job #274630) | Cod sursa (job #45432) | Cod sursa (job #1708549)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 250005;
const int MMAX = 500005;
ifstream f("politie.in");
ofstream g("politie.out");
int n, m, d, p, t[NMAX];
vector< pair<long long, pair<int,int> > >edge[NMAX];
set<long long> mySet;
int findRad(int node){
int node2 = node;
for(; t[node]!=0; node = t[node]);
for(; node2!=node; ){
int temp = t[node2];
t[node2] = node;
node2 = temp;
}
return node;
}
int unite(int x, int y){
if (x % 2 == 0)
t[y] = x;
else t[x] = y;
}
int main(){
f >> n >> m >> d >> p;
for(int i=1; i<=m; ++i){
int x, y, z, w;
f >> x >> y >> z >> w;
edge[z].push_back(make_pair(w, make_pair(x, y)));
}
for(int i=1; i<=d; ++i){
sort(edge[i].begin(), edge[i].end());
}
for(int i=1; i<=d; ++i){
for(int j=0; j<edge[i].size(); ++j){
int x = edge[i][j].second.first;
int y = edge[i][j].second.second;
int radX = findRad(x);
int radY = findRad(y);
if (radX == radY) continue;
unite(radX, radY);
mySet.insert(edge[i][j].first);
}
}
set<long long>::iterator it = mySet.end();
--it;
for(; p; --p){
g << *it << "\n";
--it;
}
return 0;
}