Cod sursa(job #45159)

Utilizator Bluedrop_demonPandia Gheorghe Bluedrop_demon Data 1 aprilie 2007 03:32:31
Problema Party Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.18 kb
// 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;
}