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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

洛谷P2863 [USACO06JAN]牛的舞会The Cow Prom

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷P2863 [USACO06JAN]牛的舞会The Cow Prom 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

稍微學習一下強連通分量。

https://www.cnblogs.com/stxy-ferryman/p/7779347.html

我覺得他講得很好。

1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 #include <vector> 6 #include <stack> 7 using namespace std; 8 const int MAXN = 1e5 + 20; 9 10 int N, M; 11 12 namespace SCC 13 { 14 vector<int> g[MAXN]; 15 stack<int> sta; 16 bool ins[MAXN]; 17 int idx[MAXN], dfn[MAXN], low[MAXN]; 18 vector<int> scc[MAXN]; int cnt = 0; 19 20 void tarjan(int cur) 21 { 22 static int num = 0; 23 dfn[cur] = low[cur] = ++num; 24 sta.push(cur), ins[cur] = true; 25 for(int i = 0; i < (int) g[cur].size(); i++){ 26 int v = g[cur][i]; 27 if(!dfn[v]) { 28 tarjan(v); 29 low[cur] = min(low[cur], low[v]); 30 } 31 else if(ins[v]) low[cur] = min(low[cur], dfn[v]); 32 } 33 if(dfn[cur] == low[cur]){ 34 ++cnt; int tmp; 35 do{ 36 tmp = sta.top(); sta.pop(); ins[tmp] = false; 37 idx[tmp] = cnt, scc[cnt].push_back(tmp); 38 }while(tmp != cur); 39 } 40 } 41 } 42 43 int main() 44 { 45 cin>>N>>M; 46 for(int i = 1, u, v; i <= M; i++){ 47 scanf("%d%d", &u, &v); 48 SCC::g[u].push_back(v); 49 } 50 51 for(int i = 1; i <= N; i++) 52 if(!SCC::dfn[i]) SCC::tarjan(i); 53 int ans = 0; 54 for(int i = 1; i <= SCC::cnt; i++) 55 if(SCC::scc[i].size() > 1) ++ans; 56 cout<<ans<<endl; 57 return 0; 58 }

?

轉載于:https://www.cnblogs.com/wsmrxc/p/9278548.html

總結

以上是生活随笔為你收集整理的洛谷P2863 [USACO06JAN]牛的舞会The Cow Prom的全部內容,希望文章能夠幫你解決所遇到的問題。

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