首页 > 其他分享 >AT_abc291_f

AT_abc291_f

时间:2023-10-04 20:45:20浏览次数:26  
标签:int ans abc291 include d2 d1

 

01bfs

 

 

跑完d1 ,d2 ( 单源最短路

枚举 中间点(去掉的点

#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
using namespace std;
const int N =1e5+4;
#define int long long
#define inf 1e18
int n ,d1[N],d2[N],ans[N];

vector<int> g[N]; void add(int x,int y){ g[x].push_back(y);}

void bfs(int *dis,int v0){
    queue<int> q;for(int i=1;i<=n;i++) dis[i]=inf ;dis[v0]=0;
  
//
    q.push(v0) ;  
    while(q.size()){
        int x= q.front() ; q.pop() ; 
        for(int y :g[x])
            if(dis[x]+1<dis[y]){
                dis[y] =dis[x]+1; q.push(y);
            }
    }
}

 
 string s[N] ;
signed main(){
    int m ;
    cin>> n >>m;
    for(int i=1;i<=n;i++){
        cin>>s[i] ;
        for(int j=0;j<m;j++) 
            if(s[i][j]=='1') 
                add(i,i+j+1);
    }
    bfs(d1,1) ; 
    
    for(int i=1;i<=n;i++) g[i].clear() ;
    for(int i=1;i<=n;i++){
        for(int j=0;j<m;j++) 
            if(s[i][j]=='1') add(i+j+1,i);
    }
    bfs(d2,n) ;

    for(int i=2;i<n;i++){
            ans[i]= inf;
            for(int j=max(1ll,i-m+1);j<i;++j)
                for(int k=1;k<=m;++k)
                    if(j+k>i&&s[j][k-1]=='1')
                        ans[i]=min(ans[i],d1[j]+d2[j+k]+1ll);
    }
    for(int i=2;i<n;i++)
         cout <<(ans[i]==inf?-1:ans[i])<<' ';cout<<endl;
}

 

 艹第一次写用了memset md

标签:int,ans,abc291,include,d2,d1
From: https://www.cnblogs.com/towboa/p/17742716.html

相关文章

  • ABC291题解(D-G)
    ABC291D-FlipCardsSolution:考虑DP,定义状态\(F_{i,0}\)为第\(i\)张卡片正面朝上的方案数,\(F_{i,1}\)为第\(i\)张卡片背面朝上的方案数,每次check是否相同然后转移即可......
  • Atcoder-ABC291 "Teleporter and Closed off" 动态DP版
    题目地址题意:在一个DAG图中,点i只有最多m条出边连向i+1~i+m(m<=10),边权均为1。对于\(k\in[2,n-1]\),依次输出当点k被删除时1到n的最短路。分析:标准做法无非就是预......
  • 周赛_ABC291
    C-LRUDInstructions2题面说了这样一句:(includingthestartingandendingpoints)我不以为意捏,认为怎么会错过。结果WA了一发。回头去找别人做的,似乎也只是把我用......
  • 题解:【ABC291F】Teleporter and Closed off
    题目链接给定一个\(n\)个点的图,每个点只向编号最多大于它\(m\)的点连单向边,求不经过\(2\simn\)中的一个点,\(1\ton\)的最短路。注意到\(m\)很小,这里给出两种......
  • ABC291
    ABCDE无意义题F考虑每个点只与其前后\(m\)个点相邻,所以去掉这个点及其相连的边只是对这\(2m\)个点有影响先预处理前后缀最短路,然后枚举前\(m\)个点与后\(m\)个......