POJ 1236 強連通分量

2021-10-03 18:30:36 字數 1847 閱讀 3460

題目鏈結 

翻譯一下題目吧,,,,

大致含義就是,有n個學校,現在要向n個學校傳遞乙個軟體,如果a學校願意支援b學校,那麼給了a,a就會給b,但是a支援b但是b不一定支援a (有向圖警告)  ,要求什麼呢,最少給多少個學校就可以給到全部的學校,最少加幾個支援關係,可以使得給任意乙個學校就可以傳遞到全部學校去。

思路:第乙個問題吧,首先同乙個強連通分量內的隨意給乙個學校就可以,因此可以將乙個強連通分量看作是乙個點處理 (縮點) ,縮點後,重新建圖,乙個點代表乙個強連通分量,不在乙個強連通分量內的,如果a中有乙個點可以到達b內的乙個點,那麼相當於兩個強連通分量有邊連線a --> b,對於這樣的關係,我們發現,只要給了a,a就會給b,也就是說,對於這樣的乙個鏈,只要給了第乙個後面的就都有了,第乙個怎麼表示呢???對於a --> b -->c,發現,b和c都有入度,也就是說b和c都會有學校傳遞給他們,就不用管了,對於a而言,它沒有入度,也就是說,如果你不給他,他就不可能會有的。所以只要統計入度為0的點的個數即可。

對於第二個問題,ahhhh,我還想了一小會兒呢,相當於將整個圖的點,新增幾條邊後變成乙個強連通分量,強連通分量內部的點一定滿足每個點至少乙個入度和乙個出度,那麼對於圖中沒有入度的點補上入度,沒有出度的點,補上出度就可以構成乙個強連通分量。要想最少話,肯定是自給自足了,就是把入度為0的點和出度為0的點連邊,比如現在有n個點出入為0,有n個點入度為0,將這n個出度為0的點分別向n個出度為0的點連邊,這樣就補全了出度和入度為0的點,如果出度和入度為0的點數量不同,假設入度為0有m個,出度為0有n個,n > m,肯定還要補的首先從n個點中選m個與出度為0的點連邊,還剩下n-m個點出度為0,只需要將這n-m個點向前面的n個補了入度的點連邊就行了,如果入度大於出度,將原本出度為0的點多向入度為0的點連邊就行了,所以答案應該是max(n, m)

特別地,如果只有乙個強連通分量,第二個就不用統計了,直接是0就可以了。

/**

* author : correct

*/#include #include #include #define mem(a, b) memset(a, b, sizeof a)

using namespace std;

const int n = 10100;

int head[n], nex[n], to[n], cnt;

void add(int a, int b)

int n;

int dfn[110], low[110];

bool vis[110];

int block[110];// 記錄屬於哪乙個強連通分量

int st[110], top;

int num, q;

void pre_work()

void tarjan(int x)

else if (vis[y])low[x] = min(low[x], dfn[y]);

} if (low[x] == dfn[x]) }}

bool c[110];

bool out[110];

int main()

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

} mem(c, 0);

mem(out, 0);

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

} }int ans = 0;

int chu, ru;

chu = 0;

ru = 0;

for (int i = 1; i <= q; i++)

cout << ans << "\n";

cout << (q == 1 ? 0 : max(chu, ru)) << "\n";

return 0;

}

poj 1236 強連通分量

題目大意 給定乙個n n 100 個點的有向圖,問 q1 最少需要選擇多少個點,使得從這些點出發能遍歷完整個圖 q2 最少需要新增多少條有向邊,使得整個圖成為強連通圖 分析 求出強連通分量後進行縮點,得到每個強連通分量的入度in,出度out q1 入度為0的強連通分量個數 q2 max 入度為0的強...

poj1236 強連通分量 縮點

題意 n 2 題解 找強連通分量,縮點。記f i 為縮完點後的新圖中各點入度,g i 為出度,ans1為f i 0的點的數目,ans2為g i 0的點的數目則第一問為ans1,第二問則為max。至於第二問的解釋,我的想法是對於得到的dag圖,考慮其中的出度為0的點和入度為0的點組成的點集v,將這些點...

poj 1236 強連通分量 縮點

有向無環圖中所有入度不為0的點,一定 可以由某個入度為0的點出發可達。假定有 n 個入度為0的點,m個出度為0的點,max m,n 就是第二個問題的解。include include include include include include include using namespace st...