NOIP2014DAY2T2

来源:互联网 发布:韩路淘宝店叫什么 编辑:程序博客网 时间:2024/06/11 00:10
#include<stdio.h>#include<stdlib.h>const int maxn=10010,maxm=200010;int e,to[maxm],next[maxm],begin[maxn];int e1,to1[maxm],next1[maxm],begin1[maxn];int p[maxn],pd[maxn],px[maxn];int q[maxn],d[maxn];void add(int x,int y){    to[++e]=y;    next[e]=begin[x];    begin[x]=e;   }void add1(int x,int y){    to1[++e1]=y;    next1[e1]=begin1[x];    begin1[x]=e1;   } void dfs(int x){    int i;    px[x]=1;pd[x]=1;    for(i=begin1[x];i;i=next1[i])        if(!pd[to1[i]])            dfs(to1[i]);    return;}int main(){    int i,j,k,m,n,x,y,s,t;    scanf("%d%d",&n,&m);    for(i=1;i<=m;i++){        scanf("%d%d",&x,&y);        add(x,y);        add1(y,x);    }    scanf("%d%d",&s,&t);    dfs(t);    for(i=1;i<=n;i++)        if(begin[i]==0)            p[i]=1;        else        for(j=begin[i];j;j=next[j])            if(!px[to[j]]){                p[i]=1;                break;            }    p[t]=0;            for(i=1;i<=n;i++)pd[i]=0;    int f=0,l=1;    q[1]=s;pd[s]=1;    while(f<l){        f++;               for(i=begin[q[f]];i;i=next[i])            if(!pd[to[i]] && !p[to[i]]){                q[++l]=to[i];                d[l]=d[f]+1;                pd[to[i]]=1;                if(to[i]==t){                    printf("%d\n",d[l]);                    return 0;                }            }         }    printf("-1\n");        return 0;}

0 0
原创粉丝点击