Mai intai trebuie sa te autentifici.
Cod sursa(job #2072738)
Utilizator | Data | 22 noiembrie 2017 10:15:52 | |
---|---|---|---|
Problema | Politie | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva ICPC | Marime | 0.96 kb |
#include <fstream>
#include <algorithm>
#include <set>
#define nmax 250100
using namespace std;
ifstream f ("politie.in");
ofstream g ("politie.out");
struct usor
{
int a,b,c,d;
}v[nmax];
set <int> sol;
int usu[nmax],n,m,afis[nmax],nr,d,p,k;
bool cmp(usor a,usor b)
{
if(a.c!=b.c) return a.c<b.c;
return a.d<b.d;
}
int gr(int nod)
{
if(usu[nod]==nod) return nod;
usu[nod]=gr(usu[nod]);
return usu[nod];
}
void unite(int a,int b)
{
usu[gr(a)]=gr(b);
}
int main()
{
f>>n>>m>>d>>p;
for(int i=1;i<=m;++i) f>>v[i].a>>v[i].b>>v[i].c>>v[i].d;
sort(v+1,v+m+1,cmp);
for(int i=1;i<=n;++i) usu[i]=i;
for(int i=1;i<=m;++i)
{
if(gr(v[i].a)!=gr(v[i].b))
{
sol.insert(v[i].d);
unite(v[i].a,v[i].b);
}
}
for(set<int>::iterator it=sol.begin();it!=sol.end();++it) afis[++k]=*it;
for(int i=k;i>=1&&i>=k-p+1;--i) g<<afis[i]<<'\n';
return 0;
}