傳遞閉包的應用

2021-10-18 01:54:06 字數 2815 閱讀 2165

傳遞閉包是離散數學中的概念,先(不嚴謹的)給出一些定義:

笛卡爾積:兩集合中的元素自由組成全部有序二元組(學名叫序偶)的集合

a =,

b=,則

a×b=

a=\,b=\,則a\times b=\

a=,b=,

則a×b

=關係:a×b

a\times b

a×b的任意乙個子集稱r

rr為從a

aa到b

bb的乙個關係,a×a

a\times a

a×a的乙個子集r

rr稱為a

aa上的乙個關係

比如小於實數集上的乙個關係

傳遞性:∀x,

y,z∈

a\forall x,y,z \in a

∀x,y,z

∈a,如果

y>∈r

\in r

y>∈r

且z>∈r,那麼

z>∈r

\in r,那麼\in r

z>∈r,那麼

z>∈r

,則稱關係r具有傳遞性。

比如小於關係,包含關係都具有傳遞性

來自知乎的一張圖,感興趣也可以去裡面補一下離散數學1

那麼,我現在給出乙個集合a

=a=\

a=,給出關係r代表小於關係,r

=r=\

r=( 即給

出a

b...)

(即給出a(即

給出a

b...)

,那麼求我能通過現在已知條件得到的所有小於關係。這個問題就是求關係r

rr的傳遞閉包

將關係r

rr通過一張圖表示,集合中的元素是圖的點,關係中的元素是圖的有向邊。將圖用鄰接矩陣表示,剩下的就是求圖上任意兩點是否可達了。

(**無關,僅僅是展示一下將關係轉換為圖及其鄰接矩陣,傳遞閉包)

我們把可以求多源最短路的floyd演算法變個形(得到的演算法叫warshall):

主要思路與floyd類似:

如果a

aa到b

bb有一條單向邊,那麼a

aa到b

bb可達

如果可以通過中間節點c

cc從a

aa到b

bb,那麼a

aa到b

bb可達

進而,如果可以通過中間節點c,d

,...

,zc,d,...,z

c,d,..

.,z從a

aa到b

bb,那麼a

aa到b

bb可達

**是三層迴圈,最外層列舉的是中間節點,複雜度o(n

3)o(n^3)

o(n3):

for
(int k =

0; k < maxn; k++)}

}最後放道例題:

唐納德·川普喜歡發表各種言論:「俄羅斯人不如美國人,墨西哥人不如加拿大人,…」但是其中的一些是fake news。現在給定n
(1

≤n≤200

)n(1\leq n \leq200)

n(1≤n≤

200)

條nyt實錘的新聞,給定m(1

≤m≤200

)m(1\leq m \leq200)

m(1≤m≤

200)

條川普說的話,判斷川普的話是真話(fact),是反話(alternative fact),還是fake news(pants on fire).

用map整乙個從string到int的對映,然後建圖,求傳遞閉包。然後即可o(1

)o(1)

o(1)

判斷是真,是反,還是fake news。

(雖然我覺得這題大可不必這樣做,鄰接表(鏈式前向星)存圖,跑一遍拓撲排序,再跑乙個bfs分層,感覺(指這個思路我也沒試過)比這個做法強多了,畢竟拓撲排序和bfs的複雜度都可以到o(∣

v∣+∣

e∣)o(|v|+|e|)

o(∣v∣+

∣e∣)

,可比o(n

3)o(n^3)

o(n3

)高到不知道哪去了)

ac**:

#include
using

namespace std;

const

int maxn =

193;

bool worse[maxn]

[maxn]

;map

int> _m;

intget

(string s)

intmain()

}for

(int i =

0; i < n; i++

)// transitive hull

for(

int k =

0; k < maxn; k++)}

}for

(int i =

0; i < m; i++

)} ↩︎

flord 傳遞閉包

傳遞指對於乙個節點i,如果j能到i,i能到k,那麼j就能到k。傳遞閉包,就是把圖中所有滿足這樣傳遞性的節點都弄出來,計算完成後,我們也就知道任意兩個節點之間是否相連。break 指跳出一層迴圈 continue 結束本次迴圈,跳過本次判斷語句 每只奶牛的技能獨一無二,如果給奶牛們排序的話,能確定自己...

floyd傳遞閉包

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

閉包傳遞(floyed)

題目大意 n代表母牛的個數,m代表給定的資訊的組數。每一組數包括a,b.代表b崇拜a 突然發現可以用tarjan演算法做 然後問你最終有多少母牛的地位是確定的。include include include include include include include include includ...