貌似以後數學裡會學到,不過還是先水一篇部落格吧
傳遞閉包一般用來解決一類具有傳遞性的問題。
定義:在交際網路中,給定若干個元素和若干對二元關係,且這些關係具有傳遞性,通過這些傳遞性推導出盡量多的元素之間的關係的問題叫做傳遞閉包。
也就是用已知條件來推出其他所有的可知條件。數獨應該就是使用了傳遞閉包的乙個例子。再比如,a>b
,b>c
,通過傳遞閉包,我們就可以得到a>c
。
把元素變成乙個點,有關係就連一條邊。
最後用floyd
演算法解決兩點之間的聯通關係。
題目大意:已知一些人的絕對實力關係,讓你推出,最後有多少人的絕對實力排名是已知的。
這就是經典的floyd
傳遞閉包。
不多說了 看題目和**:
/*
* @author: hesorchen
* @date: 2020-04-14 10:33:26
* @lastedittime: 2020-05-06 10:21:30
* @link:
*/#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
#define endl '\n'
#define pi cos(-1)
#define pb push_back
#define ll long long
#define inf 0x3f3f3f3f
#define mod 1000000009
#define lowbit(abcd) (abcd & (-abcd))
#define fre \
int mp[
110]
[110];
intmain()
for(
int k =
1; k <= n; k++
)for
(int i =
1; i <= n; i++
)for
(int j =
1; j <= n; j++
)//傳遞閉包
if(mp[i]
[k]==
1&& mp[k]
[j]==1)
else
if(mp[j]
[k]==-1
&& mp[k]
[i]==-1
)int ans =0;
for(
int i =
1; i <= n; i++
) cout << ans << endl;
return0;
}
POJ 3660 傳遞閉包
題意 給出n頭牛,m條關係,下面m行 a 打敗 b 體會 一開始以為是拓撲排序,看了其他部落格才知道是最短路的應用,一句話讓我明白了這道題該怎麼做 一頭牛如果輸的場數和贏得場數等於n 1 那麼他的排名就是確定的。只需要求這頭牛與其他牛的輸贏關係就好了,三層迴圈確定關係。看 傳遞閉包 include ...
POJ3660 奶牛競賽(閉包)
每日打卡 1 1 補 題目大意 共有n頭奶牛,奶牛兩兩間比賽,問經過m輪比賽後,有多少奶牛可以確定名次。思路 假設乙個奶牛比x頭奶牛厲害,比y頭奶牛弱,那麼如果x y n 1,則能確定它的名次。因此,我們用floyd來傳遞閉包。include include include include incl...
poj 3660 floyd判定名次 傳遞閉包
要求 n個牛,每個牛有乙個不同的rank,且1 rank n,m個條件,每個條件有兩個數字,代表兩個牛的序號,表示前乙個牛比後乙個牛的rank大。條件不會自相矛盾。問能確定幾個牛具體的rank值。方法 floyd 1.一頭牛若被lose頭牛打敗,戰勝win頭牛,且lose win n 1,即可確定r...