bzoj:3392: [Usaco2005 Feb]Part Acquisition 交易


Description

奶牛们接到了寻找一种新型挤奶机的任务,为此它们准备依次经过N(1≤N≤50000)颗行星,在行星上进行交易.为了方便,奶牛们已经给可能出现的K(1≤K≤1000)种货物进行了由1到K的标号.由于这些行星都不是十分发达.没有流通的货币,所以在每个市场里都只能用固定的一种货物去换取另一种货物.奶牛们带着一种上好的饲料从地球出发,希望进行最少的交易,最终得到所需要的机器.饲料的标号为1,所需要的机器的标号为K.如果任务无法完成,输出-1.

Input

第1行是两个数字N和K. 第2到N+1行,每行是两个数字Ai和Bi,表示第i颗行星愿意提供Ai为得到Bi.

Output

第1行输出最小交换次数

Sample Input

6 5
1 3
3 2
2 3
3 1
2 5
5 4

Sample Output

4
bfs不解释……
#include<queue>
#include<cstdio>
#include<algorithm>
using namespace std;

struct na{
    int y,ne;
    na(){
        ne=0;
    }
};
int n,k,a,l[1001],r[1001],x,y,dis[1001],i;
na b[50001];
queue <int> q;
char cc;
int read(){
    int a=0;
    cc=getchar();
    while(cc<'0'||cc>'9') cc=getchar();
    while(cc>='0'&&cc<='9') a=a*10+cc-48,cc=getchar();
    return a;
}
int main(){
    n=read();k=read();
    for (i=1;i<=n;i++){
        x=read();y=read();
        if (l[x]==0) l[x]=i;else b[r[x]].ne=i;
        r[x]=i;b[i].y=y;
    }
    for (i=1;i<=k;i++) dis[i]=1001;
    q.push(1);dis[1]=1;
    while(!q.empty()){
        int p=q.front();
        for (i=l[p];i;i=b[i].ne){
            if (dis[b[i].y]==1001){
                if (b[i].y==k){
                    printf("%d",dis[p]+1);
                    return 0;
                }
                dis[b[i].y]=dis[p]+1;
                q.push(b[i].y);
            }
        }
        q.pop();
    }
    printf("-1");
}
优质内容筛选与推荐>>
1、OSWorkFlow分析
2、mqtt协议
3、Adaboost算法实现
4、sql server 类oracle vm_contact() 函数创建
5、sql server 删除所有的表


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn