Nu aveti permisiuni pentru a descarca fisierul grader_test9.ok
Cod sursa(job #2832845)
Utilizator | Data | 14 ianuarie 2022 13:51:24 | |
---|---|---|---|
Problema | Politie | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva ICPC | Marime | 1.15 kb |
#include <fstream>
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
struct nod{
int x,y,t,c;
};
int t[250010],rang[250010];
int n,m,p,D,nr;
vector<nod>v;
map<int,int>M;
bool cmp(nod a,nod b)
{
if(a.t != b.t)
return a.t < b.t;
return a.c < b.c;
}
int radacina(int x)
{
if(t[x]==0)
return x;
int k=radacina(t[x]);
t[x]=k;
return k;
}
void uneste(int x,int y)
{
int rx=radacina(x), ry=radacina(y);
if(rang[rx] > rang[ry])
t[ry]=rx;
else if(rang[ry] > rang[rx])
t[rx]=ry;
else
{
t[ry]=rx;
rang[rx]++;
}
}
ifstream f("politie.in");
ofstream g("politie.out");
int main() {
f>>n>>m>>D>>p;
for(int i=1;i<=n;i++)
{
nod x;
f>>x.x>>x.y>>x.t>>x.c;
v.push_back(x);
}
sort(v.begin(),v.end(),cmp);
for(auto it:v)
if(radacina(it.x) != radacina(it.y))
{
M[it.c]=1;
uneste(it.x, it.y);
nr++;
if(nr == n-1)
break;
}
for(auto it=M.rbegin();it!=M.rend()&&p;it++,p--)
g<<it->first<<'\n';
return 0;
}