Pagini recente » Cod sursa (job #1944117) | Cod sursa (job #932488) | Cod sursa (job #1128994) | Cod sursa (job #605928) | Cod sursa (job #67678)
Cod sursa(job #67678)
#include <cstdio>
#include <vector>
#define fin "obiective.in"
#define fout "obiective.out"
#define Nmax 32001
#define INFI 100000000
#define Tmax 100001
using namespace std;
vector <int> g[Nmax],dir[Nmax],qu[Nmax],p[Nmax];
int N,M,T,c[Nmax],viz[Nmax],ret[Tmax];
void go() {
int i,minx,x,y,tmp;
minx=INFI;
for (i=1;i<=N;++i)
if (c[i] < minx && !viz[i]) {
x=i;
minx=c[i];
}
if (minx==INFI)
return;
viz[x]=1;
for (i=0;i<(int)g[x].size();++i) {
y=g[x][i];
if (c[x]+dir[x][i]<c[y])
c[y]=c[x]+dir[x][i];
}
go();
}
int main() {
int i,j,x,y;
freopen(fin,"r",stdin); freopen(fout,"w",stdout);
scanf("%d%d",&N,&M);
while ( M -- ) {
scanf("%d%d",&x,&y);
g[x].push_back(y); dir[x].push_back(0);
g[y].push_back(x); dir[y].push_back(1);
}
scanf("%d",&T);
for (i=0;i<T;++i) {
scanf("%d%d",&x,&y);
qu[x].push_back(y);
p[x].push_back(i);
}
for (i=1;i<=N;++i)
if ((int)qu[i].size()>0) {
for (j=1;j<=N;++j) {
c[j]=INFI;
viz[j]=0;
}
c[i]=0;
go();
for (j=0;j<(int)qu[i].size();++j)
ret[p[i][j]]=c[qu[i][j]];
}
for (i=0;i<T;++i)
printf("%d\n",ret[i]);
return 0;
}