hdu 5961 傳遞(暴力搜尋)

2022-05-17 09:09:10 字數 1934 閱讀 5442

我們稱乙個有向圖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同時為傳遞的。

input

包含至多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。保證輸入的圖一定滿足給出的限制條件。

output

對每個資料,你需要輸出一行。如果p! q都是傳遞的,那麼請輸出』t』。否則, 請輸出』n』 (均不包括引號)。

題意:就不解釋反正都是中文。

就是遍歷所有的邊然後然後判斷是否符合題目條件,單純暴力挺卡時間的,可以用vector來存相鄰邊這樣會快不少。

第乙個用vector過的,第二個用結構體做的比較卡時間,邊比較密集的話還是用結構體比較好點否則用vector比較快。

#include #include #include #include using namespace std;

const int m = 2e3 + 20;

char sl[m][m];

int n;

vectorq[m] , p[m];

void init()

}int dfs(int x , vectorg , char cp) }}

return 1;

}int main()

}int flag = 0;

for(int i = 1 ; i <= n ; i++)

}if(!flag) }}

if(flag)

printf("n\n");

else

printf("t\n");

}return 0;

}

#include #include #include using namespace std;

const int m = 3e3 + 10;

char sl[m][m];

int n , e , head1[m] , head2[m];

struct ss a[m * m] , b[m * m];

void init()

}void add(int x , int y , ss s , int head)

int dfs(int t , char cp , int head , ss s)

}return 1;

}int main()

}int flag = 0;

for(int i = 1 ; i <= n ; i++)

}if(!flag) }}

if(flag)

printf("n\n");

else

printf("t\n");

}return 0;

}

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個頂點的競賽圖。現在,給你兩個有向...