刷圖論的艱難歷程開始了,這是隨便一翻看到的例題,剛開始沒有一點思路,但一點點順著書看下去,發現這道題的背後,是對於floyd的新思考。就如同看到傳遞閉包所使用的warshall演算法的驚訝,這一題著實讓我覺得驚豔了一把。不廢話,這題是說,鋪設網路,網路中的一些節點是有一部分運營商運營的,然後,給你兩個節點,讓你求能夠提供這兩個節點間服務的運營商,沒有的話輸出「-」。首先,把提供這些服務的運營商的代號,轉換為對應字典序的位,然後,通過』|『運算把它併入乙個集合之中,並不斷求它們連通的交並將之併入集合,可得如下遞推式:
map[i][j] |= map[i][k]&map[k][j];
由此,該題得解。
**如下:
#include #include#include
#include
using
namespace
std;
const
int maxn = 210
;char str[30
];int
map[maxn][maxn];
intmain()
for(k = 1; k <= n ; k ++)
for(i = 1; i <= n; i ++)
for(j = 1; j <= n; j ++)
map[i][j] |= map[i][k] &map[k][j];
while(scanf("
%d%d
",&x,&y) && x &&y)
}if(flag) putchar('\n'
);
else printf("
-\n"
); }
}return0;
}
poj 2570經典二進位制floyd
floyd 位運算 題目大意 有若干家公司,他們分別在若干個城市的路由器間鋪設了自己的光纖,現在問,如果要從路由器a到路由器b傳送資料,能否只使用一家公司的光纖而達到目的,如能則分別輸出這些公司的代號。思路 雖然不是最短路,卻可以用每對頂點的最短路徑 floyd warshell 演算法來求解。di...
POJ2570 二進位制,位運算,Floyd
題意 給你乙個有向圖,兩點之間有多種連線方式,然後每次詢問都問你點a,b之間有哪些方式可以到達,每個小字母是乙個方式.思路 很巧妙的位運算和floyd應用,借助floyd的更新過程,去更新任意兩組邊組合起來的長邊,如 map i j 是由 map i k 和 map k j 接起來的,更新方式很容易...
Floyd演算法的應用 POJ 2240
該題大意是套匯問題,貨幣根據匯率轉換來套取多餘的錢數,由於是各個貨幣兩兩轉換,即由floyd判環應用變形則可解決問題。floyd演算法用於解決任意兩個節點之間的最短距離,判斷是否成環等,其實質為動態規劃。1 floyd演算法的應用 2 include 3 include 4 include 5usi...