Cod sursa(job #1710148)

Utilizator DjokValeriu Motroi Djok Data 28 mai 2016 16:21:08
Problema Politie Scor 100
Compilator cpp Status done
Runda Arhiva ICPC Marime 0.84 kb
#include<bits/stdc++.h>
using namespace std;

typedef struct lol {
    int x,y,tip,cost;

    friend bool operator < (const lol &a,const lol &b) {
        if(a.tip==b.tip) return a.cost<b.cost;
        return a.tip<b.tip;
    }

}troll;

int i,n,m,G,P,p[250005];
troll a[500005];
set<int> S;

int Find(int x) { return p[x]==x ? x:p[x]=Find(p[x]); }

void Unite(int x,int y) { p[Find(x)]=Find(y); }

int main()
{
  ifstream cin("politie.in");
  ofstream cout("politie.out");

  ios_base::sync_with_stdio(0); cin.tie(0);

  cin>>n>>m>>G>>P;
  for(i=1;i<=m;++i) cin>>a[i].x>>a[i].y>>a[i].tip>>a[i].cost;

  for(i=1;i<=n;++i) p[i]=i;

  sort(a+1,a+m+1);

  for(i=1;i<=m;++i) if(Find(a[i].x)!=Find(a[i].y)) S.insert(-a[i].cost),Unite(a[i].x,a[i].y);

  while(P--) cout<<-(*S.begin())<<'\n',S.erase(S.begin());

 return 0;
}