CCF 201509 4 高速公路(強連通分量)

2021-08-28 03:45:59 字數 1041 閱讀 4500

求有多少個結點對能夠互相到達

思路一【50分】:對每個結點dfs,求傳遞閉包,時間為o(v*e),**簡單,但是超時

思路二【100分】:計算圖的強連通分量(scc),各個分量裡面的點都是可以相互到達的

scc演算法:o(v+e)

強連通分量(strongly connected components)

①dfs求拓撲序(按u.f公升序排列)

②將圖轉置,按拓撲序的逆序dfs,得到的就是scc

#include #include #include #include #include #include #define endl "\n"

using namespace std;

vectortopo;

vector> adj,tmp;

int n,m,a,b;

bool vis[10005];

vectorcnt; //各個scc的結點個數

void dfs1(int x)

} topo.push_back(x); //完成搜尋,即結點變為黑色時,加入拓撲序

}void dfs2(int x) }}

inline int compute(int a) //組合數c(n, 2)

int main()

memset(vis,0,sizeof(vis)); //第一次dfs,記錄"拓撲序"

for(int i=1; i<=n; ++i) }

memset(vis,0,sizeof(vis)); //第二次dfs,求scc

for(int i=n-1; i>=0; --i) }

int sum = 0;

for(int i=0; isum += compute(cnt[i]);

cout

}

CCF 201509 4 高速公路

問題描述 試題編號 201509 4 試題名稱 高速公路 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 某國有n個城市,為了使得城市間的交通更便利,該國國王打算在城市之間修一些高速公路,由於經費限制,國王打算第一階段先在部分城市之間修一些單向的高速公路。現在,大臣們幫國王擬了乙...

CCF 201509 4 高速公路

問題描述 某國有n個城市,為了使得城市間的交通更便利,該國國王打算在城市之間修一些高速公路,由於經費限制,國王打算第一階段先在部分城市之間修一些單向的高速公路。現在,大臣們幫國王擬了乙個修高速公路的計畫。看了計畫後,國王發現,有些城市之間可以通過高速公路直接 不經過其他城市 或間接 經過乙個或多個其...

CCF201509 4 高速公路 強連通分量

傳送門 ccf201509 4 高速公路 tarjan強連通分量演算法的模板題。求得強連通分量後,包含的點為cnt個,其中的任意兩個城市都是便利城市對,數量為 include define ll long long define inf 0x3f3f3f3f using namespace std ...