zoukankan      html  css  js  c++  java
  • Luogu P3645 [APIO2015]雅加达的摩天楼

    题目
    直接BFS求01最短路。
    因为状态是(O(nsqrt n))级别的所以没有问题。
    注意判断某个hl是否经过某个点要用bitset。

    #include<bits/stdc++.h>
    #define pb push_back
    using namespace std;
    const int N=30007;
    vector<int>dog[N];
    bitset<N>vis[N];
    queue<tuple<int,int,int>>q;
    int used[N],n,m,s,t;
    int read(){int x;scanf("%d",&x);return x;}
    void move(int p,int id,int step)
    {
        if(!used[p])
        {
            used[p]=1;
            for(int x:dog[p]) if (!vis[p][x]) vis[p][x]=1,q.emplace(p,x,step);
        }
        if(~id&&!vis[p][id]) vis[p][id]=1,q.emplace(p,id,step);
    }
    int main()
    {
        n=read(),m=read();int i,b,p,step;
        for(i=0;i^m;++i)
        {
    	b=read(),p=read();
    	if(!i) s=b;
    	if(i==1) t=b;
    	dog[b].pb(p);
        }
        if(s==t) return !printf("0");
        move(s,-1,0);
        while(!q.empty())
        {
            tie(b,p,step)=q.front(),q.pop();
            if(b==t) return !printf("%d",step);
            if(b-p>=0) move(b-p,p,step+1);
            if(b+p<n) move(b+p,p,step+1);
        }
        return !printf("-1");
    }
    
  • 相关阅读:
    二分查找法的实现和应用汇总
    hdu 3062 Party 2SAT入门
    network monitor 抓包软件 微软的 架构师提供的
    富文本编辑器
    分享图标
    js日期时间控件
    jquery form
    javascript学习站
    sql生成model类
    PHP学习
  • 原文地址:https://www.cnblogs.com/cjoierShiina-Mashiro/p/11774267.html
Copyright © 2011-2022 走看看