Pagini recente » Cod sursa (job #1279375) | Cod sursa (job #2147568) | Cod sursa (job #857069) | Cod sursa (job #128959) | Cod sursa (job #1709897)
#include <iostream>
#include <map>
#include <cstdio>
#include <string>
#include <set>
#include <algorithm>
#include <vector>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
#define DMAX 250006
#define x first
#define y second
int rt[DMAX], n, m, p, d, q, k, x, y, a, b, t, c;
vector <pair< pair<int, int>, pair<int, int> > > v;
vector <int> ans;
int root_up(int k)
{
if(k!=rt[k])
rt[k]=root_up(rt[k]);
return rt[k];
}
int main()
{
freopen("politie.in", "r", stdin);
freopen("politie.out", "w", stdout);
scanf("%d %d %d %d", &n, &m, &d, &p);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d%d", &x, &y, &t, &c);
v.push_back(make_pair(make_pair(t, c), make_pair(x, y)) );
}
for(int i=1;i<=n;i++) rt[i]=i;
sort(v.begin(), v.end());
for(int i=0;i<v.size();i++)
{
rt[v[i].y.x]=root_up(v[i].y.x);
rt[v[i].y.y]=root_up(v[i].y.y);
if(rt[v[i].y.x]!=rt[v[i].y.y])
{
rt[rt[v[i].y.y]]=rt[rt[v[i].y.x]];
ans.push_back(v[i].x.y);
}
}
sort(ans.begin(), ans.end());
for(int i=1;i<=p;i++)
{
while(ans.back()==ans[ans.size()-2])
ans.pop_back();
printf("%d\n", ans.back());
ans.pop_back();
}
return 0;
}