Cod sursa(job #2948359)

Utilizator vlad_dimuVlad Dimulescu vlad_dimu Data 27 noiembrie 2022 17:07:01
Problema A+B Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.01 kb
#include <fstream>
#include <vector>
#define MAXN 31200
using namespace std;

ifstream fin( "ninjago.in" );
ofstream fout( "ninjago.out" );

struct Node{
    int vecin, cost, e;
};

struct Muchie{
    int x, y, cost, e;
}muchii[MAXN];

bool cmp( Muchie a, Muchie b ){
    if( a.e == b.e )
        return a.cost < b.cost;
    return a.e < b.cost;
}

vector <Node> graph[MAXN];
int marked[MAXN];

void dfs( int node, int comp ){
    int vecin, i;
    marked[node] = comp;
    for( i = 0; i < graph[node].size(); i++ ){
        vecin = graph[node][i].vecin;
        if( graph[node][i].e == 0 && marked[vecin] == 0 )
            dfs( vecin, comp );
    }
}

int main(){
    int T, n, m, i, j, cost, x, y, pow, e, sol, comp, alese, sumcost, sumE;
    char ch;
    fin >> T >> n >> m;
    for( i = 0; i < m; i++ ){
        fin >> x >> y;
        cost = 0;
        e = 0;
        pow = 1;
        for( j = 0; j < 4; j++ ){
            fin >> ch;
            if( ch == 'E' )
                e++;
            else
                cost += (ch - 'A' + 1) * pow;
            pow *= 5;
        }

        graph[x - 1].push_back( {y - 1, cost, e} );
        graph[y - 1].push_back( {x - 1, cost, e} );

        muchii[i].x = x;
        muchii[i].y = y;
        muchii[i].cost = cost;
        muchii[i].e = e;
    }

    if( T == 1 ){
        dfs( 0, 1 );
        sol = 0;
        for( i = 0; i < n; i++ )
            if( marked[i] == 1 )
                sol++;
        fout << sol;
    }
    else{
        //componente conexe
        comp = 0;
        for( i = 0; i < n; i++ ){
            if( marked[i] == 0 ){
                comp++;
                dfs( i, comp );
            }
        }

        sort( muchii, muchii + m, cmp );
        alese = 0;
        sumcost = 0;
        sumE = 0;
        i = 0;
        while( alese < n - 1 ){
            if( marked[muchii[i].x] != marked[muchii[i].y] ){ //unim cele doua comp conexe

            }
        }
    }

    return 0;
}