Cod sursa(job #482150)

Utilizator andra23Laura Draghici andra23 Data 2 septembrie 2010 17:18:51
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.42 kb
#include<iostream>
#include<fstream>
#define maxn 1030

using namespace std;

int eg[maxn], u[maxn], g[maxn];
int a[maxn];

int main(){
    ifstream f("balanta.in");
    ofstream gg("balanta.out");
    int n, m;
    f>>n>>m;
    int i, j, k, r;
    
    for (i = 1; i <= n; i++){
        u[i] = 1;
        g[i] = 1;
    }
    
    for (i = 1; i <= m; i++){
        f>>k;
        for (j = 1; j <= k*2; j++)
            f>>a[j];
        f>>r;
        if (r == 0) 
            for (j = 1; j <= k*2; j++)
                eg[a[j]] = 1;
        else 
            if (r == 1) {
                for (j = 1; j <= k; j++)
                    if (g[a[j]] != 0)
                        g[a[j]] = -g[a[j]];  
                for (j = k+1; j <= 2*k; j++)
                    if (u[a[j]] != 0)
                        u[a[j]] = -u[a[j]]; 
                for (j = 1; j <= n; j++){
                    if (u[j] < 0)
                        u[j] = -u[j];
                    else 
                        u[j] = 0;
                    if (g[j] < 0)
                        g[j] = -g[j];
                    else 
                        g[j] = 0;
                }
            }
            else {
                for (j = k+1; j <= 2*k; j++)
                    if (g[a[j]] != 0)
                        g[a[j]] = -g[a[j]];  
                for (j = 1; j <= k; j++)
                    if (u[a[j]] != 0)
                        u[a[j]] = -u[a[j]]; 
                for (j = 1; j <= n; j++){
                    if (u[j] < 0)
                        u[j] = -u[j];
                    else 
                        u[j] = 0;
                    if (g[j] < 0)
                        g[j] = -g[j];
                    else 
                        g[j] = 0;
                }
            }  
    }
    
    for (i = 1; i <= n; i++)
        if (eg[i] == 1){
            g[i] = 0;
            u[i] = 0;
        }
    int nr1 = 0, nr2 = 0;
    for (i = 1; i <= n; i++){
        if (u[i] == 1)
            nr1++;
        if (g[i] == 1)
            nr2++;    
    }
    
    if (nr1 == 1 && nr2 == 0){
        for (i = 1; i <= n; i++)
            if (u[i] == 1)
                gg<<i<<'\n';
    } else 
        if (nr1 == 0 && nr2 == 1) {
            for (i = 1; i <= n; i++)
                if (g[i] == 1)
                    gg<<i<<'\n';
        } else 
            gg<<0<<'\n';
    
    return 0;
}