Cod sursă (job #14513)

Utilizator avatar mads2194 Andrei Stroe mads2194 IP ascuns
Problemă Zapada (clasele 11 și 12) Compilator cpp | 1,56 kb
Rundă Concurs clasele 11-12 Status evaluat
Dată 8 mar. 2013 14:50:04 Scor 10
#include <cstdio>
#include <queue>
#include <vector>

using namespace std;

#define N 10005

struct road
{
    int to;
    int d;
};

//bool viz[N];
int D[N],P[N];


vector <road> a[N];
queue <int> q;

int n,k;

void read()
{
    int x,y,c;
    int m;

    scanf("%d%d%d",&n,&m,&k);
    while(m--)
        {
            scanf("%d%d%d",&x,&y,&c);
            a[x].push_back((road){y,c});
            a[y].push_back((road){x,c});
        }

}

void solve()
{
    D[1]=0;
    for(int i=2;i<=n;++i)
        D[i]=-1;

    size_t i;
    int x,y,t;
    while(!q.empty())
    {
        x=q.front();
        q.pop();
        //viz[x]=1;

        for(i=0;i<a[x].size();++i)
        {
            y = a[x][i].to;
            //t = D[x]+a[x][i].d;
            t = a[x][i].d;

            if(P[x]!=y)
            if(D[y]==-1 || D[y]>t)
            {
                q.push(y);
                D[y]=t;
                P[y]=x;
            }
        }
    }
}

void afis()
{
    int s=0;
    for(int i=1;i<=n;++i)
        s+=D[i];
    printf("%d\n",s);
}

int main()
{
    freopen("zapada.in","r",stdin);
    freopen("zapada.out","w",stdout);

    read();

    /*D[1]=0;
    for(int i=2;i<=n;++i)
        D[i]=-1;*/

    q.push(1);
    solve();

    afis();

    int x,y,c;
    while(k--)
        {
            scanf("%d%d%d",&x,&y,&c);
            a[x].push_back((road){y,c});
            a[y].push_back((road){x,c});

            q.push(1);
            solve();
            afis();
        }

    return 0;
}