要求: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。第一階段 快慢指標在環中相遇 ...