Cod sursa(job #761785)

Utilizator matei_cChristescu Matei matei_c Data 27 iunie 2012 14:18:10
Problema Lazy Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

#define maxn 201010

struct lazy
{
	int x,y ;
	long long c1,c2 ;
	int ind ;
};

lazy mc[maxn];
int n,m ;
int tata[maxn] ;

int cmp(lazy a, lazy b)
{
	
	return ( ( a.c1 < b.c1 ) || ( ( a.c1==b.c1 ) && ( a.c2>b.c2 ) ) ) ;
}

int radacina(int x)
{	
	if( x != tata[x] )
		tata[x] = radacina ( tata[x] ) ;
	return tata[x] ;
}

void adauga(int a,int b)
{
	tata[a] = b ;
}

int main()
{
	
	freopen("lazy.in","r",stdin);
	freopen("lazy.out","w",stdout);
	
	scanf("%d%d",&n,&m);
	
	for(int i=1;i<=m;++i)
	{
		scanf("%d%d%lld%lld",&mc[i].x,&mc[i].y,&mc[i].c1,&mc[i].c2);
		mc[i].ind = i ;
		tata[i] = i ;
	}
	
	sort ( mc + 1 , mc + m + 1 , cmp ) ;
	
	int ok[maxn] ;
	
	for(int i=1;i<=m;++i)
	{
		int t1 = radacina ( mc[i].x ) ;
		int t2 = radacina ( mc[i].y ) ;
		if( t1 != t2 )
		{
			
			adauga ( t1 , t2 ) ;
			ok [ mc[i].ind ] = 1 ;
		}
	}
	
	for(int i=1;i<=m;++i)
		if( ok[i] )
			 printf("%d\n",i) ;
	
	return 0;
	
}