Cod sursa(job #466997)

Utilizator gorgovanAurelian Namascu gorgovan Data 28 iunie 2010 10:44:27
Problema Pod Scor 0
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 2 Marime 1.95 kb
using namespace std;
#include<iostream>
#include<fstream>
#include<cstdio>
#include<vector>
#include<algorithm>
#include<queue>
#include<slist.h>
#include<bitset>
short H[2000];
#define pb push_back
#define oo 0x3f3f3f3f
#define foreach(v)   for(typeof (v).begin() it=(v).begin();it!=(v).end();it++)
ofstream fout("scara3.out");
struct nod{
    short leg;

    short bani;
};
vector<nod> G[2000];
queue<short> q;
int N,K,d[2000];
int bani[2000];
bitset<2000> isinq;
short L;
void bellman(int start)
{short u,i;
    q.push(start);
    for(i=1;i<=N;i++)
      d[i]=oo;
    d[start]=0;
    isinq[start]=1;
    while(!q.empty())
    {u=q.front();
    q.pop();
    isinq[u]=0;
    foreach(G[u])
    {
        if(1+d[u]<=d[it->leg])
        {

            if(d[it->leg]==d[u]+1)
            bani[it->leg]=min(bani[it->leg],bani[u]+it->bani);
            else
            {{bani[it->leg]=bani[u]+it->bani;
              d[it->leg]=d[u]+1;}
        if(isinq[it->leg]==0)
        {q.push(it->leg);
        isinq[it->leg]=1;

        }}

        }
    }
    }
    //cout<< d[N]<<" "<<bani[N];
    fout<< d[N]<<" "<<bani[N];

}
void cit()
{short i,x,j,y;
    ifstream fin("scara3.in");

    fin>>N;
    for(i=0;i<=N-1;i++)
       G[i].pb((nod){i+1,0});
    fin>>K;
    for(i=1;i<=K;i++)
    {
        fin>>x>>y;
        H[x]=y;
        for(j=2;j<=y;j++)
         G[x].pb((nod){x+j,0});

    }
    fin>>L;
    for(i=1;i<=L;i++)
    {
        fin>>x>>y;
        if(H[x]!=0)
        {
            for(j=H[x]+1;j<=2*y;j++)
            {  G[x].pb((nod){x+j,(j%2==0)?(j/2):(j/2+1)});

            }

        }
        else
        {  for(j=2;j<=2*y;j++)
             {G[x].pb((nod){x+j,(j%2==0)?(j/2):(j/2+1)});
             //cout<<x<<" "<<j<<""<<((j%2==0)?(j/2):(j/2+1))<<"\n";
             }
        }
    }
    fin.close();

}

int main()
{
     cit();

     bellman(0);
     fout.close();
     return 0;
}