日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 默认站点!

默认站点

當前位置: 首頁 >

jzoj3319-[BOI2013]雪地踪迹【bfs】

發布時間:2023/12/3 32 豆豆
默认站点 收集整理的這篇文章主要介紹了 jzoj3319-[BOI2013]雪地踪迹【bfs】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正題


題目大意

一個n?mn*mn?m的雪地,有兩種動物RRRFFF會在雪地上留下RRRFFF的腳印(只可以走到相鄰格子,從(1,1)(1,1)(1,1)進入(n,m)(n,m)(n,m)出來,且會覆蓋掉原先的腳印)。

求至少有多少只動物經過


解題思路

首先我們知道(1,1)(1,1)(1,1)所在的聯通塊必定是最后一只經過的動物,因為至少所以我們優先選擇整個聯通塊作為最后一只動物。

然后由這個聯通塊開始向外擴展另一種腳印的聯通塊,之后不停擴展直到擴完為止。


codecodecode

#pragma GCC optimize(2) %:pragma GCC optimize(3) %:pragma GCC optimize("Ofast") %:pragma GCC optimize("inline") #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<queue> using namespace std; const int N=4001; const int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1}; int n,m,ans,v[N][N]; int qx[N*N],qy[N*N],l=1,r; char c[N][N],z; queue<int> shix,shiy; inline long long read() {char c;int f=0,d=1;while(c=getchar(),!isdigit(c)) if(c=='-') d=-1;f=(f<<3)+(f<<1)+c-48;while(c=getchar(),isdigit(c)) f=(f<<3)+(f<<1)+c-48;return d*f; } void bfs(int x,int y,char pos) {shix.push(x);shiy.push(y);while(!shix.empty()){x=shix.front();y=shiy.front();shix.pop();shiy.pop();for(int k=0;k<4;k++){int zx=x+dx[k],zy=y+dy[k];if(zx<1||zy<1||zx>n||zy>m)continue;if(v[zx][zy]||c[zx][zy]!=pos)continue;v[zx][zy]=1;shix.push(zx);shiy.push(zy);qx[++r]=zx;qy[r]=zy;}} } int main() {freopen("data.txt","r",stdin);n=read();m=read();for(int i=1;i<=n;i++)gets(c[i]+1);v[1][1]=qx[++r]=qy[r]=1;bfs(1,1,c[1][1]);z=c[1][1];while(l<=r){ans++;int R=r;if(z=='F') z='R';else z='F';for(int i=l;i<=R;i++)bfs(qx[i],qy[i],z);l=R+1;}cout<<ans; }

總結

以上是默认站点為你收集整理的jzoj3319-[BOI2013]雪地踪迹【bfs】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得默认站点網站內容還不錯,歡迎將默认站点推薦給好友。