CCF 201509-4 高速公路(100分)
試題編號: | 201509-4 |
試題名稱: | 高速公路 |
時間限制: | 1.0s |
記憶體限制: | 256.0MB |
問題描述: |
問題描述 某國有n個城市,為了使得城市間的交通更便利,該國國王打算在城市之間修一些高速公路,由於經費限制,國王打算第一階段先在部分城市之間修一些單向的高速公路。 輸入格式 輸入的第一行包含兩個整數n, m,分別表示城市和單向高速公路的數量。 輸出格式 輸出一行,包含一個整數,表示便利城市對的數量。 樣例輸入 5 5 樣例輸出 3 樣例說明
評測用例規模與約定 前30%的評測用例滿足1 ≤ n ≤ 100, 1 ≤ m ≤ 1000; |
問題連線:CCF 201509-4 高速公路
題解:有向圖強連通分支模板題
AC的C++程式碼:
#include<iostream>
#include<vector>
#include<stack>
using namespace std;
const int N=10010;
vector<int>g[N];
stack<int>s;
bool flag[N];//標記結點是否在棧內
int dfn[N],low[N];
int index;
long long ans;
void Tarjan(int u)
{
dfn[u]=low[u]=++index;
s.push(u);
flag[u]=true;//記錄結點u在棧內
for(int i=0;i<g[u].size();i++){
int v=g[u][i];
if(!dfn[v]){//如果結點v沒有被訪問
Tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(flag[v])//如果v被訪問並且在棧內
low[u]=min(low[u],dfn[v]);
}
if(dfn[u]==low[u]){//u是一個強連通分量的根
int num=0,v;
do{
num++;
v=s.top();
s.pop();
flag[v]=false;//記錄v不再棧中
}while(u!=v);//退棧,把整個強連通分量都彈出來
if(num>1)
ans+=(num-1)*num/2;
}
}
int main()
{
int n,m,a,b;
scanf("%d%d",&n,&m);
while(m--){
scanf("%d%d",&a,&b);
g[a].push_back(b);
}
for(int i=1;i<=n;i++)
if(!dfn[i])//如果結點i沒有被訪問
Tarjan(i);
printf("%lld\n",ans);
return 0;
}
相關文章
- 高速公路
- CCF ISBN
- CCF NLP比賽
- ccf省賽3等獎
- ccf碰撞的小球(100分)
- CCF-CSP 20180302:小球碰撞
- CCF 201409-2 畫圖
- CCF CSP202006-2 稀疏向量
- CCF-回收站選址
- CCF第二題之視窗
- CCF跳一跳Python程式Python
- CCF 201312-5 I'm stuck!
- ccf 公共鑰匙盒 java實現Java
- CCF 201412-2 Z字型掃描
- CCF 202009-2 風險人群篩查
- CCF 202006-2 稀疏向量【map的使用】
- CCF CSP 201809-1 賣菜 題解
- CCF之網路延時(樹形dp)
- Day13 備戰CCF-CSP練習
- Day7 備戰CCF-CSP練習
- Day4 備戰CCF-CSP練習
- CCF CSP-S 2024 提高組初賽解析
- CCF 201712-2 遊戲(Python100分)遊戲Python
- CCF 201512-1 數位之和 python 滿分Python
- 江民科技護航湖北省高速公路暢通出行
- CCF/CSP認證-第33次-相似度計算
- 什麼是計算機中的高速公路-匯流排?計算機
- 智慧高速公路建設標準和指南全掃描(上)
- 迷你高速公路Mini Motorways Mac(城市交通模擬遊戲)Mac遊戲
- CCF CSP 201703-2學生排隊(c++100)C++
- 高速公路延誤經濟損失可高達2.5億美元
- 高速公路二維碼定位報警系統搭建解決方案
- Alluxio CEO李浩源:構築資料流動的高速公路UX
- CCF軟體能力認證-第一次-視窗
- CCF 202009-2 風險人群篩查 滿分程式碼
- CCF CSP201903-4訊息傳遞介面(c++100)C++
- CCF第二題之Z字形掃描(只有90分555555)
- CCF-NOIP-2018 提高組(複賽) 模擬試題(一)