poj 3660 floyd判定名次 傳遞閉包

2021-09-30 19:01:16 字數 603 閱讀 9261

要求:n個牛,每個牛有乙個不同的rank,且1<=rank<=n,m個條件,每個條件有兩個數字,代表兩個牛的序號,表示前乙個牛比後乙個牛的rank大。條件不會自相矛盾。問能確定幾個牛具體的rank值。

方法:floyd

1.一頭牛若被lose頭牛打敗,戰勝win頭牛,且lose+win=n-1,即可確定rank為lose+1。

2.將每條邊賦值為1,這道題不是簡單的權值相加,而是傳遞閉包,假如a>b,b>c,那麼a>c,即a->c這條邊也是1。

3.運用floyd即可。

#include#include#include#include#include#include#include#define inf 0x3f3f3f3f

using namespace std ;

int n , m ;

int map1[105][105] ;

void floyd()

if(win + lose == n - 1)

ans ++ ;

} printf("%d\n" , ans) ;

}int main()

floyd() ;

}

POJ 3660 詳細題解分析,Floyd

題目鏈結 利用floyd求出可以連通的cow 就是可以確定大小關係 最後遍歷一遍,找與該牛可以確定大小關係的個數,為n 1即可確定rank。ac include include include include include include include using namespace std t...

Floyd判圈演算法

參考 判斷鍊錶中是否有環 大概就是說兩個指標首先都指向鍊錶的首部,然後乙個每次走一步,乙個每次走兩步,如果有環,那麼慢的肯定能夠追上快的,否則快的就會先到達終點。求環的長度 兩個指標重合時,快的停止,慢的每次走一步,計算圈的長度。求環的起點 if head null slowptr slowptr ...

Floyd判環演算法

leetcode 142 判斷鍊錶是否存在環,若存在環則返回鍊錶開始入環的第乙個節點,否則返回null。採用快慢雙指標,慢指標每次移動乙個結點,快指標每次移動兩個結點。如圖所示,假設頭節點到入環結點的長度為n,環的長度為k,慢指標移動的步數為x,快指標移動的步數為2x。第一階段 快慢指標在環中相遇 ...