BZOJ2208 [Jsoi2010]连通数
生活随笔
收集整理的這篇文章主要介紹了
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]连通数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 六、配置Oracle数据库的网络环境
- 下一篇: 学习目标