Pagini recente » Cod sursa (job #1277082) | Cod sursa (job #3130362) | Cod sursa (job #1434654) | Cod sursa (job #1641740) | Cod sursa (job #1709690)
#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];
bool f[NMax];
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);
if(!f[a.c])
P.push_back(a.c);
f[a.c]=1;
}
}
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());
for(int i=P.size()-1;i>=P.size()-x && i>=0;i--)
{
fout<<P[i]<<'\n';
}
return 0;
}