博主將這種邏輯推演稱為「邏輯自洽」,即從某個命題出發的所有推理路徑都會將結論引導到同乙個最終命題(開玩笑的,千萬別以為這是真正的邏輯自洽的定義……)。現給定乙個更為複雜的邏輯推理圖,本題就請你檢查從乙個給定命題到另乙個命題的推理是否是「邏輯自洽」的,以及存在多少種不同的推理路徑。例如上圖,從「你遇到難題了嗎?」到「那就別擔心了」就是一種「邏輯自洽」的推理,一共有 3 條不同的推理路徑。
輸入首先在一行中給出兩個正整數 n(1
接下來 m 行,每行給出一對命題之間的推理關係,即兩個命題的編號s1 s2
,表示可以從s1
推出s2
。題目保證任意兩命題之間只存在最多一種推理關係,且任一命題不能迴圈自證(即從該命題出發推出該命題自己)。
最後一行給出待檢驗的兩個命題的編號a b
。
在一行中首先輸出從a
到b
有多少種不同的推理路徑,然後輸出yes
如果推理是「邏輯自洽」的,或no
如果不是。
題目保證輸出資料不超過 109。
記憶搜尋以後bfs遍歷一遍標記
#include
using
namespace std;
//#define int long long
vector<
int>edge[
510]
;int s, t;
int dp[
510]
;int
dfs(
int u)
if(u == t)
for(
auto v : edge[u]
)return dp[u];}
int flag;
int vis[
510]
;void
bfs1()
if(now == t)
continue
;for
(auto v : edge[now])}
}signed
main()
cin >> s >> t;
dfs(s)
; cout << dp[s]
-dp[t]
<<
" ";
dp[t]=1
;bfs1()
;if(!flag) cout <<
"yes\n"
;else cout <<
"no\n";}
/*1 2
1 31 4
2 53 5
4 55 6
5 75 8
6 76 9
7 98 9
*/
那就別擔心了 30分 PTA
博主將這種邏輯推演稱為 邏輯自洽 即從某個命題出發的所有推理路徑都會將結論引導到同乙個最終命題 開玩笑的,千萬別以為這是真正的邏輯自洽的定義 現給定乙個更為複雜的邏輯推理圖,本題就請你檢查從乙個給定命題到另乙個命題的推理是否是 邏輯自洽 的,以及存在多少種不同的推理路徑。例如上圖,從 你遇到難題了嗎...
PTA L3 025 那就別擔心了 30分
博主將這種邏輯推演稱為 邏輯自洽 即從某個命題出發的所有推理路徑都會將結論引導到同乙個最終命題 開玩笑的,千萬別以為這是真正的邏輯自洽的定義 現給定乙個更為複雜的邏輯推理圖,本題就請你檢查從乙個給定命題到另乙個命題的推理是否是 邏輯自洽 的,以及存在多少種不同的推理路徑。例如上圖,從 你遇到難題了嗎...
pta L3 025 那就別擔心了 30 分
輸入格式 輸入首先在一行中給出兩個正整數 n 1接下來 m 行,每行給出一對命題之間的推理關係,即兩個命題的編號 s1 s2,表示可以從 s1 推出 s2。題目保證任意兩命題之間只存在最多一種推理關係,且任一命題不能迴圈自證 即從該命題出發推出該命題自己 最後一行給出待檢驗的兩個命題的編號 a b。...