博主將這種邏輯推演稱為「邏輯自洽」,即從某個命題出發的所有推理路徑都會將結論引導到同乙個最終命題(開玩笑的,千萬別以為這是真正的邏輯自洽的定義……)。現給定乙個更為複雜的邏輯推理圖,本題就請你檢查從乙個給定命題到另乙個命題的推理是否是「邏輯自洽」的,以及存在多少種不同的推理路徑。例如上圖,從「你遇到難題了嗎?」到「那就別擔心了」就是一種「邏輯自洽」的推理,一共有 3 條不同的推理路徑。
輸入格式:
輸入首先在一行中給出兩個正整數 n(1接下來 m 行,每行給出一對命題之間的推理關係,即兩個命題的編號 s1 s2,表示可以從 s1 推出 s2。題目保證任意兩命題之間只存在最多一種推理關係,且任一命題不能迴圈自證(即從該命題出發推出該命題自己)。
最後一行給出待檢驗的兩個命題的編號 a b。
輸出格式:
在一行中首先輸出從 a 到 b 有多少種不同的推理路徑,然後輸出 yes 如果推理是「邏輯自洽」的,或 no 如果不是。
題目保證輸出資料不超過 10
9 。
輸入樣例 1:
7 87 6
7 46 5
4 15 2
5 32 1
3 17 1
輸出樣例 1:
3 yes
輸入樣例 2:
7 87 6
7 46 5
4 15 2
5 36 1
3 17 1
輸出樣例 2:
3 no
這是上個月天梯賽的一道題,當時比賽的時候覺得正好有個見過的模型,就照著寫了乙個類似寬搜的東西 但是掛掉了,好像當時只得了11分,現在重新寫還是一樣的演算法 是19分,改了乙個記憶化搜尋的方式能ac
#include
#include
#include
#include
#define maxn 505
/* * 基於寬度優先搜尋是不能實現絕對層級展開的
* 故存在一定的錯誤性
* */
using
namespace std;
int head[maxn]
;struct edgee[maxn * maxn]
;int tot,flag =
1,num[maxn]
;bool exist[maxn]
;inline
void
add_edge
(int u,
int v)
intdfs
(int x)
if(res ==
0) flag =
false
;return num[x]
= res;
}void
bfs(
int start,
int end)}}
intmain
(int argc,
char
* ar**)
int a,b;
scanf
("%d %d"
,&a,
&b);
num[a]=1
;// 記憶化搜尋
bfs(a,b)
; cout << num[b]
<<
' ';
if(flag) cout <<
"yes"
;else cout <<
"no"
;return0;
}
#include
#include
#include
#include
#define maxn 505
/* * 基於寬度優先搜尋是不能實現絕對層級展開的
* 故存在一定的錯誤性
* */
using
namespace std;
int head[maxn]
;struct edgee[maxn * maxn]
;int tot,flag =
1,num[maxn]
;bool exist[maxn]
;inline
void
add_edge
(int u,
int v)
intdfs
(int x)
if(res ==
0) flag =
false
;return num[x]
= res;
}int
main
(int argc,
char
* ar**)
int a,b;
scanf
("%d %d"
,&a,
&b);
num[b]=1
;// 記憶化搜尋的方式記得把num[b]設成1
dfs(a)
; cout << num[b]
<<
' ';
if(flag) cout <<
"yes"
;else cout <<
"no"
;return0;
}
pta L3 025 那就別擔心了 30 分
輸入格式 輸入首先在一行中給出兩個正整數 n 1接下來 m 行,每行給出一對命題之間的推理關係,即兩個命題的編號 s1 s2,表示可以從 s1 推出 s2。題目保證任意兩命題之間只存在最多一種推理關係,且任一命題不能迴圈自證 即從該命題出發推出該命題自己 最後一行給出待檢驗的兩個命題的編號 a b。...
python初級 302 5 列表
1 def關鍵字 2 函式名及後面跟隨的括號 3 冒號加上函式體 函式名及後面跟隨的括號 3 帶乙個,二個,三個引數的函式及呼叫 family mom dad baby nums 1,2,3,4 列表 一堆資料存在一起,放在某種組或者集合中 存放示意圖 陰影部分的叫做索引 下面的內容為元素 注意 必...
NEEPU OJ 3025 集合之和
描述給定乙個集合s 集合元素數量 30 求出此集合所有子集元素之和。輸入集合中的元素 元素 1000 輸出乙個正整數表示元素之和。輸入樣例 1 2 3 輸出樣例 1 提示樣例解釋 子集為 元素之和為 2 3 2 3 10 思路這道題是一道找規律題,假設有n個元素 每次固定第乙個元素,組合剩下的元素 ...