Pagini recente » Cod sursa (job #184221) | Cod sursa (job #1500379) | Cod sursa (job #555492) | Cod sursa (job #3271217) | Cod sursa (job #2390209)
#include <bits/stdc++.h>
#define NMAX 250005
using namespace std;
ifstream f("politie.in");
ofstream g("politie.out");
struct drum{
int x,y,t,c;
}d[500005];
bool cmp(const drum &d1, const drum &d2)
{
if (d1.t!=d2.t) return d1.t<d2.t;
return d1.c<d2.c;
}
int n,D,p,m, T[NMAX], sol[NMAX];
int find(int x)
{
if (T[x]==x) return x;
T[x]=find(T[x]);
return T[x];
}
void unite(int a, int b)
{
T[find(a)] = find(b);
}
set<int> setulLuiBaczaur;
priority_queue<int, vector<int>, less<int> > pq;
int main()
{
f>>n>>m>>D>>p;
for (int i=0;i<m;i++)
{
f>>d[i].x>>d[i].y>>d[i].t>>d[i].c;
}
sort(d,d+m,cmp);
for (int i=1;i<=n;i++) T[i]=i;
for (int i=0;i<m;i++)
{
if (find(d[i].x) != find(d[i].y))
{
setulLuiBaczaur.insert(d[i].c);
unite(d[i].x,d[i].y);
}
}
int ind=0;
for (set<int>::iterator i = setulLuiBaczaur.begin(); i!=setulLuiBaczaur.end(); ++i) sol[ind++]=*i;
for (int i=ind-1;i>=0 && i>=ind-p;i--)
{
g<<sol[i]<<"\n";
}
return 0;
}