Cod sursa(job #1613289)

Utilizator andytosaAndrei Tosa andytosa Data 25 februarie 2016 12:01:47
Problema Ubuntzei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <fstream>
#include <vector>
#include <queue>
#define inf 100000000
using namespace std;
ifstream fin("ubuntzei.in");
ofstream fout("ubuntzei.out");

struct cel{
    int muc, co;
} aux;
struct oras{
    int a, poz;
} orase[20];
queue<int> coada;
vector<cel> ad[2005];
int n, m, x, y, c, cost[20][20], k, val[2010],now,nxt;

void reset_val(){
    for(int i = 0; i < n; ++i){
        val[i] = inf;
    }
}
int main()
{
    fin >> n >> m >> k;
    orase[0].a = 0;
    orase[0].poz = 0;
    for(int i = 1; i <= k; ++i){
        fin >> orase[i].a;
        orase[i].a--;
        orase[i].poz = i;
    }
    ++k;
    orase[k].a = n - 1;
    orase[k].poz = k;
    for(int i = 1; i <= m; ++i){
        fin >> x >> y >> c;
        x--;
        y--;
        aux.co = c;
        aux.muc = y;
        ad[x].push_back(aux);
        aux.muc = x;
        ad[y].push_back(aux);
    }
    for(int i = 0; i < k - 1; ++i)
        for(int j = 0; j < k; ++j)
            cost[i][j] = inf;

    for(int i = 0; i < k; ++i){
        reset_val();
        val[orase[i].a] = 0;
        coada.push(i);
        while(!coada.empty()){
            now = coada.front();
            coada.pop();
            int lung = ad[now].size();
            for(int j = 0; j < lung; ++j){
                int nxt = ad[now][j].muc;
                if(val[nxt] > ad[now][j].co){
                    val[nxt] = ad[now][j].co;
                    coada.push(nxt);
                }
            }
        }
        for(int j = 0; j < k; ++j){
            if(i != j){

            }
        }
    }
    return 0;
}