Cod sursa(job #2821938)

Utilizator marcumihaiMarcu Mihai marcumihai Data 23 decembrie 2021 12:55:20
Problema Lazy Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f ("lazy.in");
ofstream g ("lazy.out");

int n;
int m;
struct drum
{
    int x;
    int y;
    long long c1;
    long long c2;
    int index;
};
drum a[200005];

int cmp(drum A , drum B)
{
    if(A.c1<B.c1)
        return 1;
    if(A.c1==B.c1 && A.c2>B.c2)
        return 1;
    return 0;
}
int parinte[200005];




int Find(int x)
{
    int aux=x;
    while(parinte[aux]!=0)
        aux=parinte[aux];
    while(parinte[x]!=0)
    {
        int aux2=x;
        x=parinte[x];
        parinte[aux2]=aux;
    }
    return aux;
}

void Union(int x , int y)
{
    parinte[x]=y;
}



int main()
{
    f>>n>>m;
    for(int i=1;i<=m;++i)
    {
        f>>a[i].x>>a[i].y>>a[i].c1>>a[i].c2;
        a[i].index=i;
    }
    sort(a+1 , a+m+1 , cmp);


    int bagate=0;
    vector <int> v;
    for(int i=1;bagate<n && i<=m;++i)
    {
        int par1=Find(a[i].x);
        int par2=Find(a[i].y);

        if(par1!=par2)
        {
            Union(par1 , par2);
            v.push_back(a[i].index);
        }
    }
    for(int i=0;i<v.size();++i)
        g<<v[i]<<"\n";
    return 0;
}