Pagini recente » Cod sursa (job #1203188) | Cod sursa (job #2586792) | Cod sursa (job #50599) | Cod sursa (job #1155000) | Cod sursa (job #466997)
Cod sursa(job #466997)
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;
}