Cod sursa(job #847228)

Utilizator stoicatheoFlirk Navok stoicatheo Data 3 ianuarie 2013 16:37:00
Problema Lazy Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
struct MyStruct {
    long long d,c;
    int a,b,nr;
};
 
const int N = 200010;
int n,m,t[N];
vector<int> sol;
MyStruct a[N];
inline bool cmp(MyStruct a,MyStruct b) 
{
    if(a.d==b.d)
        return a.c>b.c;
    return a.d<b.d;
}
int GetFather(int nod)
{
    if(t[nod]==nod) return nod;
    int rez=GetFather(t[nod]);
    t[nod]=rez;
    return rez;
}
int main()
{
    freopen("lazy.in","r",stdin);
    freopen("lazy.out","w",stdout);
    int i,x,y;
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;++i)
        {scanf("%d%d%lld%lld",&a[i].a,&a[i].b,&a[i].d,&a[i].c);a[i].nr = i;}
    for(i=1;i<=n;i++)
        t[i]=i;
    sort(a+1,a+m+1,cmp);
    for(i=1;i<=m;i++) 
    {
        x=GetFather(a[i].a);
        y=GetFather(a[i].b);
        if(x!=y) 
        {
            sol.push_back(a[i].nr);
            t[y]=x;
        }
    }
    sort(sol.begin(),sol.end());
    for(i=0;(unsigned int)i<sol.size();i++)
        printf("%d\n",sol[i]);
    return 0;
}