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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CodeForces - 475B Strongly Connected City(最短路+判断强联通图/思维)

發(fā)布時(shí)間:2024/4/11 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CodeForces - 475B Strongly Connected City(最短路+判断强联通图/思维) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目鏈接:點(diǎn)擊查看

題目大意:給出n和m然后給出n條橫向街道和m條縱向街道,總共包括了n*m個(gè)結(jié)點(diǎn),每條街道都是單向通道,問該圖是否能夠組成強(qiáng)聯(lián)通圖(有向圖中任意兩點(diǎn)間都存在路徑)

題目分析:乍一看沒感覺和最短路有關(guān)系,其實(shí)可以轉(zhuǎn)換為Floyd的思想,Floyd是可以以n*n*n的時(shí)間復(fù)雜度求出每?jī)蓚€(gè)點(diǎn)之間的最短路,我們只需要將賦值改變一下就可以判斷每?jī)蓚€(gè)點(diǎn)之間的聯(lián)通性了,因?yàn)榻o出的是一個(gè)矩陣,n和m最大只有20,所以至多有400個(gè)點(diǎn),這個(gè)數(shù)據(jù)范圍正好可以用Floyd跑一遍,一開始先根據(jù)題目要求建好圖,直接跑一遍再判斷一遍就出結(jié)果了,挺簡(jiǎn)單的一個(gè)題,主要是思路得想到


2019年11月17日更新:

原來這是個(gè)思維題emmmm

只用判斷一下四周的四條邊能否順時(shí)針或逆時(shí)針組成一個(gè)圈就行了,為什么呢?因?yàn)橥ㄟ^每一個(gè)點(diǎn)肯定能順著到達(dá)周圍的四條邊,通過周圍的四條邊就能遍歷所有的每一行每一列了

這里我用了一個(gè)四維數(shù)組maze[x][y][xx][yy]來記錄點(diǎn)(x,y)到點(diǎn)(xx,yy)的聯(lián)通性,直接上代碼了:

Floyd:

#include<iostream> #include<cstdio> #include<string> #include<ctime> #include<cstring> #include<algorithm> #include<stack> #include<queue> #include<map> #include<sstream> using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=25;int n,m;int maze[N][N][N][N];bool check()//判斷聯(lián)通性,若兩個(gè)點(diǎn)之間的最短路為0則聯(lián)通,為inf則為不聯(lián)通 {for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)for(int ii=1;ii<=n;ii++)for(int jj=1;jj<=m;jj++)if(maze[i][j][ii][jj]==inf)return false;return true; }int main() { // freopen("input.txt","r",stdin);while(scanf("%d%d",&n,&m)!=EOF){for(int i=1;i<=n;i++)//初始化for(int j=1;j<=m;j++)for(int ii=1;ii<=n;ii++)for(int jj=1;jj<=m;jj++)maze[i][j][ii][jj]=(i==ii&&j==jj)?0:inf; string x,y;cin>>x>>y;x=" "+x;y=" "+y;for(int i=1;i<=n;i++)//根據(jù)題目要求建邊{if(x[i]=='>'){for(int j=1;j<m;j++)maze[i][j][i][j+1]=0;}else if(x[i]=='<'){for(int j=m;j>1;j--)maze[i][j][i][j-1]=0;}}for(int j=1;j<=m;j++){if(y[j]=='v'){for(int i=1;i<n;i++)maze[i][j][i+1][j]=0;}else if(y[j]=='^'){for(int i=n;i>1;i--)maze[i][j][i-1][j]=0;}}for(int k=1;k<=n;k++)//Floydfor(int kk=1;kk<=m;kk++)for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)for(int ii=1;ii<=n;ii++)for(int jj=1;jj<=m;jj++)if(maze[i][j][k][kk]+maze[k][kk][ii][jj]<maze[i][j][ii][jj])maze[i][j][ii][jj]=maze[i][j][k][kk]+maze[k][kk][ii][jj];if(check())printf("YES\n");elseprintf("NO\n");}return 0; }

思維:

#include<iostream> #include<cstdlib> #include<string> #include<cstring> #include<cstdio> #include<algorithm> #include<climits> #include<cmath> #include<cctype> #include<stack> #include<queue> #include<list> #include<vector> #include<set> #include<map> #include<sstream> #include<unordered_map> using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e5+100;char a[N],b[N];int main() { // freopen("input.txt","r",stdin); // ios::sync_with_stdio(false);int n,m;scanf("%d%d",&n,&m);scanf("%s%s",a+1,b+1);if(a[1]=='<'&&a[n]=='>'&&b[1]=='v'&&b[m]=='^')puts("YES");else if(a[1]=='>'&&a[n]=='<'&&b[1]=='^'&&b[m]=='v')puts("YES");elseputs("NO");return 0; }

?

總結(jié)

以上是生活随笔為你收集整理的CodeForces - 475B Strongly Connected City(最短路+判断强联通图/思维)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。