floyd求傳遞閉包

2021-09-11 23:37:51 字數 910 閱讀 2362

n頭牛比賽,m種比賽結果,最後問你一共有多少頭牛的排名被確定了,其中如果a戰勝b,b戰勝c,則也可以說a戰勝c,即可以傳遞勝負。求能確定排名的牛的數目。

思路:如果一頭牛被x頭牛打敗,打敗y頭牛,且x+y=n-1,則我們容易知道這頭牛的排名就被確定了,所以我們只要將任何兩頭牛的勝負關係確定了,在遍歷所有牛判斷一下是否滿足x+y=n-1,將滿足這個條件的牛數目加起來就是所求解。

抽象為簡單的floyd傳遞閉包演算法,在加上每個頂點的出度與入度 (出度+入度=頂點數-1,則能夠確定其編號)。

傳遞閉包的定義:

g的傳遞閉包定義為g*=(v,e*),其中e=。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn=

205;

int n, m;

int e[maxn]

[maxn]=;

int s[maxn][2

]=;void

floyd()

}}}int

main()

floyd()

;for

(int i=

1;i<=n;i++)}

int ans=0;

for(

int i=

1;i<=n;i++)}

cout

}

Floyd演算法 求傳遞閉包

題目讓確定有幾個人的位置是確定的,如果乙個點有x個點能到達此點,從該點出發能到達y個點,若x y n 1 x y n 1 x y n 1,則該點的位置是確定的。用floyd演算法算出每兩個點之間的距離,最後統計時,若dis a b dis a b dis a b 之間無路且dis b a dis b...

floyd傳遞閉包

傳遞閉包 我第一反應是凸包emmm 就是把具有傳遞性的關係傳遞開。一般我們用一鄰接矩陣儲存。比如許多的並查集解決的問題,如果需要細緻 效率o n 可以用傳遞閉包去做。看一道題吧,poj1094,不等式的傳遞性。這道題在處理方面,d i,j 為1時表示i1 矛盾與不確定,優先矛盾。2 若加入了幾個,發...

floyd 排序(傳遞閉包)

給定 n 個變數和 m 個不等式。其中 n 小於等於26,變數分別用前 n 的大寫英文本母表示。不等式之間具有傳遞性,即若 a b 且 b c 則 a c。請從前往後遍歷每對關係,每次遍歷時判斷 如果能夠確定全部關係且無矛盾,則結束迴圈,輸出確定的次序 如果發生矛盾,則結束迴圈,輸出有矛盾 如果迴圈...