我們稱乙個有向圖g是傳遞的,當且僅當對任意三個不同的頂點a,若g中有 一條邊從a到b且有一條邊從b到c ,則g中同樣有一條邊從a到c。我們稱圖g是乙個競賽圖,當且僅當它是乙個有向圖且它的基圖是完全圖。換句 話說,將完全圖每條邊定向將得到乙個競賽圖。
下圖展示的是乙個有4個頂點的競賽圖。
現在,給你兩個有向圖p = (v,ep)和q = (v,ee),滿足:
\1. ep與ee沒有公共邊;
\2. (v,ep⋃ee)是乙個競賽圖。
你的任務是:判定是否p,q同時為傳遞的。
包含至多20組測試資料。第一行有乙個正整數,表示資料的組數。
對於每組資料,第一行有乙個正整數n。接下來n行,每行為連續的n個字元,每 個字元只可能是』-』,』p』,』q』中的一種。
∙如果第i行的第j個字元為』p』,表示有向圖p中有一條邊從i到j;
∙如果第i行的第j個字元為』q』,表示有向圖q中有一條邊從i到j;
∙否則表示兩個圖中均沒有邊從i到j。
保證1 <= n <= 2016,乙個測試點中的多組資料中的n的和不超過16000。保證輸入的圖一定滿足給出的限制條件。
對每個資料,你需要輸出一行。如果p! q都是傳遞的,那麼請輸出』t』。否則, 請輸出』n』 (均不包括引號)。
4
4-ppp
--pq
---q
----
4-p-p
--pq
p--q
----
4-ppp
--qq
----
--q-
4-ppp
--pq
----
--q-
tnt
n
在下面的示意圖中,左圖為圖為q。題目已經給出如何判斷乙個圖是傳遞的.注:在樣例2中,p不是傳遞的。在樣例4中,q不是傳遞的。
當這個圖為傳遞的,兩個子圖要滿足兩個條件:
使用拓撲排序判環即可
#include
using
namespace std;
#define mem(a, b) memset(a, b, sizeof(a))
const
int n =
2020
;vector<
int> e1[n]
;vector<
int> e2[n]
;char s[n]
[n];
int vis[n]
, n;
bool
dfs1
(int u)
vis[u]=1
;return
true;}
bool
dfs2
(int u)
vis[u]=1
;return
true;}
bool
topsort1()
bool
topsort2()
void
solve()
for(
int i =
1; i <= n; i++
)else
if(s[i]
[j]==
'q')}}
int f1 =
topsort1()
, f2 =
topsort2()
;if(topsort1()
&&topsort2()
)puts
("t");
else
puts
("n");
}int
main()
hdu5961傳遞(bitset亂搞)
hdu5961 題意 中文題題解 1 判斷傳遞的條件為 若g中有 一條邊從a到b且有一條邊從b到c 則g中同樣有一條邊從a到c。2 我們去列舉b,我們假設集合sb 表示有一條 x 指向 b的邊。我們假設集合tb 表示有有一條 b 指向 x的邊。3 我們再去列舉sb 中的元素,假設我們當前列舉的是 x...
HDU 5961 傳遞 bfs亂搞
我們稱乙個有向圖g是傳遞的,當且僅當對任意三個不同的頂點a,若g中有 一條邊從a到b且有一條邊從b到c 則g中同樣有一條邊從a到c。我們稱圖g是乙個競賽圖,當且僅當它是乙個有向圖且它的基圖是完全圖。換句 話說,將完全圖每條邊定向將得到乙個競賽圖。下圖展示的是乙個有4個頂點的競賽圖。現在,給你兩個有向...
hdu 5961 傳遞(暴力搜尋)
我們稱乙個有向圖g是傳遞的,當且僅當對任意三個不同的頂點a,若g中有 一條邊從a到b且有一條邊從b到c 則g中同樣有一條邊從a到c。我們稱圖g是乙個競賽圖,當且僅當它是乙個有向圖且它的基圖是完全圖。換句 話說,將完全圖每條邊定向將得到乙個競賽圖。下圖展示的是乙個有4個頂點的競賽圖。現在,給你兩個有向...