Cod sursa(job #2950690)

Utilizator Remus.RughinisRemus Rughinis Remus.Rughinis Data 4 decembrie 2022 14:48:56
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.54 kb
#include <iostream>
#include <fstream>
#include <vector>
#define MAXN 31200
#define EVAL 624 // Nu contine E daca e mai mic decat EVAL

using namespace std;

struct Edge{
  int a;
  int b;
  int cost;
};
Edge edges[MAXN];

vector<vector<int>> v, cost;

void quicksort(int begin, int end){
  int b = begin, e = end, pivot = edges[(b + e) / 2].cost;
  Edge aux;

  while(edges[b].cost < pivot)
    b ++;
  while(edges[e].cost > pivot)
    e --;

  while(b < e){
    aux = edges[b];
    edges[b] = edges[e];
    edges[e] = aux;

    do{
      b ++;
    } while(edges[b].cost < pivot);
    do{
      e --;
    } while(edges[e].cost > pivot);
  }

  if(e > begin)
    quicksort(begin, e);
  if(e + 1 < end)
    quicksort(e + 1, end);
}

int main(){
  int n, m, t, i, j, a, b, x, p5, nr;
  char c;

  ifstream fin ("ninjago.in");
  fin >> t >> n >> m;
  v.resize(n);
  cost.resize(n);

  for(i = 0; i < m; i ++){
    fin >> a >> b;
    a --;
    b --;

    fin.get();
    c = fin.get();
    p5 = 1;
    x = 0;
    nr = 0;

    while(c != '\n'){
      // printf("%c ", c);
      if(c != 'E')
        x += (int)(c - 'A' + 1) * p5;
      else
        nr ++;
      p5 *= 5;
      c = fin.get();
    }
    x += nr * p5;
    // printf("\n");

    v[a].push_back(b);
    cost[a].push_back(x);
    edges[i] = {a, b, x};
  }
  fin.close();

  // for(i = 0; i < n; i ++){
  //   printf("%d:  ", i + 1);
  //   for(j = 0; j < v[i].size(); j ++)
  //     printf("%d - %d  ", v[i][j] + 1, cost[i][j]);
  //   printf("\n");
  // }

  ofstream fout ("ninjago.out");
  fout.close();

  return 0;
}