Pagini recente » ONIS 2015, Solutii Runda 1 | Cod sursa (job #1527742) | Cod sursa (job #1186691) | Cod sursa (job #1545359) | Cod sursa (job #45158)
Cod sursa(job #45158)
// Problema Party
#include <stdio.h>
#define MAX 1001
#define NMAX 101
int vine[NMAX];
int a[NMAX][NMAX];
int elm[NMAX];
int C[MAX][3];
int n;
void nuvine( int i )
{
vine[i] = 0;
int j;
for( j=1; j<=n; j++ )
if( ( a[i][j] == 1 ) && ( vine[j] )) nuvine( j );
}
int main()
{
int m, i, j;
freopen( "party.in" ,"rt", stdin );
scanf( "%d %d", &n, &m );
for( i=1; i<=n; i++ )
{
vine[i] = 1;
elm[i] = 0;
for( j=1; j<=n; j++ )
a[i][j] = 0;
}
for( i=1; i<=m; i++ )
{
scanf( "%d %d %d", &C[i][0], &C[i][1], &C[i][2] );
switch( C[i][2] )
{
case 0:
vine[C[i][0]] = 10;
vine[C[i][1]] = 10;
break;
case 1:
a[C[i][0]][C[i][1]] = 1;
elm[C[i][0]]++;
break;
case 2:
a[C[i][1]][C[i][0]] = 1;
elm[C[i][1]]++;
break;
}
}
fclose( stdin );
for( i=1; i<=m; i++ )
if( C[i][2] == 3 )
if( vine[C[i][1]] == 10 ) nuvine(C[i][0]);
else if( vine[C[i][0]] == 10 ) nuvine(C[i][1]);
for( i=1; i<=m; i++ )
if( (C[i][2] == 3) && ( vine[C[i][1]] ) && ( vine[C[i][0]] ) )
if( elm[C[i][0]] > elm[C[i][1]] )
nuvine( C[i][0] ); else nuvine( C[i][1] );
j = 0;
for( i=1; i<=n; i++ ) if( vine[i] ) j++;
freopen( "party.out", "wt", stdout );
printf( "%d\n", j );
for( i=1; i<=n; i++ ) if( vine[i] ) printf( "%d\n", i );
fclose( stdout );
return 0;
}