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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BZOJ2208 [Jsoi2010]连通数

發布時間:2025/4/16 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ2208 [Jsoi2010]连通数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述:

度量一個有向圖連通情況的一個指標是連通,指途中可達點對的個數。

下圖的連通數是14

現在要你求出連通數

n<=2000

?

題解:

網上的題解有的寫得很復雜,但是看到n的范圍這么小,當然會想到搜索算法。

所以考慮用bfs。

直接暴力地搜出每個點的連通數,最后統計一下答案即可。

注意不要忘了加上自己。

附上代碼:

#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<queue> using namespace std; int n,a[2001][2001],top1,cnt[2001],top2; long long ans; char s[2001]; bool vis[2001]; void bfs(int p) {queue <int> q ;memset(vis,0,sizeof(vis)) ;q.push(p) ;vis[p]=1 ;while(!q.empty()){int x=q.front();q.pop() ;for (int i=1;i<=cnt[x];i++)if (!vis[a[x][i]]){ans++ ;vis[a[x][i]]=1 ;q.push(a[x][i]) ;}} } int main() {scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%s",s);int p=strlen(s);for(int j=0;j<p;j++)if(s[j]=='1'){cnt[i]++;a[i][cnt[i]]=j+1;}}for(int i=1;i<=n;i++)bfs(i);printf("%lld",ans+n); }

另外此題的做法有:

做法1:tarjan縮點+拓撲

做法2:floyd傳遞閉包

做法3:暴力dfs

轉載于:https://www.cnblogs.com/jiangminghong/p/9817093.html

總結

以上是生活随笔為你收集整理的BZOJ2208 [Jsoi2010]连通数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。