Cod sursa(job #45154)

Utilizator Bluedrop_demonPandia Gheorghe Bluedrop_demon Data 1 aprilie 2007 03:23:06
Problema Party Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.82 kb
// Problema Party

#include <stdio.h>
#define MAX         1001
#define NMAX        101

short vine[NMAX];
short a[NMAX][NMAX];
short C[MAX][3];

int n;

void nuvine( int i )
{
     vine[i] = -1;
     int j;
     for( j=1; j<=n; j++ )
          if( a[i][j] == 1 ) 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] = 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;
                                 break;
                            case 2:
                                 a[C[i][1]][C[i][0]] = 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]] > -1 ) && ( vine[C[i][0]] > -1 ) )
             nuvine( C[i][0] );
                 
    j = 0;
    for( i=1; i<=n; i++ ) if( vine[i] > -1 ) j++;
             
    
    freopen( "party.out", "wt", stdout );
             printf( "%d\n", j );
             for( i=1; i<=n; i++ ) if( vine[i] > -1 ) printf( "%d\n", i );
    fclose( stdout );
    return 0;
}