Cod sursa(job #467297)

Utilizator sodamngoodSo Damn Good sodamngood Data 28 iunie 2010 13:54:33
Problema Andrei Scor 10
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 2 Marime 2.03 kb
#include <iostream>
#include <vector>
using namespace std;
#define nmax 100010

int N, M, V[nmax];
vector<pair<int, int> > G[nmax];

//C = 0 alb
//C = 1 rosu
//C = 2 violet

int main() {
    FILE *f1=fopen("andrei.in", "r"), *f2=fopen("andrei.out", "w");
    int i, j, p, q, c;
    fscanf(f1, "%d %d\n", &N, &M);
    
    for(i=1; i<=M; i++) {
         fscanf(f1, "%d %d %d\n", &p, &q, &c);
         G[p].push_back(make_pair(q, c));
         G[q].push_back(make_pair(p, c));
    }
    
    srand(time(NULL));
    
    //nu alb in A
    //nu rosu in B
    
    int ok = 1;
    while(ok) {
         ok = 0;
         for(i=1; i<=N; i++) {
              int p = rand() % 2;
              V[i] = p;
         }
         for(i=1; i<=N; i++) {
              if(V[i] == 0) {
                   //verific daca mai exista vreun nod in 0 care sa fie cu acesta alb
                   for(j=0; j<G[i].size(); j++) {
                        if(V[ G[i][j].first ] == 0 && G[i][j].second == 0) {
                             ok = 1;
                             break;
                        }
                        if(V[ G[i][j].first ] == 1 && G[i][j].second == 2) {
                             ok = 1;
                             break;
                        }
                   }
              }
              else if(V[i] == 1) {
                   //verific daca mai exista vreun nod in 1 care sa fie cu acesta rosu
                   for(j=0; j<G[i].size(); j++) {
                        if(V[ G[i][j].first ] == 1 && G[i][j].second == 1) {
                             ok = 1;
                             break;
                        }
                        if(V[ G[i][j].first ] == 0 && G[i][j].second == 2) {
                             ok = 1;
                             break;
                        }
                   }
              }
         }
    }
    
    for(i=1; i<=N; i++) {
         fprintf(f2, "%d ", V[i]);
    }
    fprintf(f2, "\n");
    fclose(f1); fclose(f2);
    return 0;
}