描述
動物王國中有三類動物
a,b,c
,這三類動物的食物鏈構成了有趣的環形。a吃
b,b吃
c,c吃
a。現有n
個動物,以1-
n編號。每個動物都是
a,b,c
中的一種,但是我們並不知道它到底是哪一種。
有人用兩種說法對這
n個動物所構成的食物鏈關係進行描述:
第一種說法是
"1x y"
,表示x和y
是同類。
第二種說法是
"2x y"
,表示x吃y
。此人對
n個動物,用上述兩種說法,一句接一句地說出
k句話,這
k句話有的是真的,有的是假的。當一句話滿足下列三條之一時,這句話就是假話,否則就是真話。1)
當前的話與前面的某些真的話衝突,就是假話;2)
當前的話中x或
y比n大,就是假話;3)
當前的話表示x吃
x,就是假話。
你的任務是根據給定的n(
1 <=n <= 50,000)和k
句話(0 <=k <= 100,000
),輸出假話的總數。
輸入
第一行是兩個整數n和
k,以乙個空格分隔。以下k
行每行是三個正整數d,
x,y,兩數之間用乙個空格隔開,其中
d表示說法的種類。
若d=1
,則表示x和
y是同類。
若d=2
,則表示x吃
y。輸出
只有乙個整數,表示假話的數目。
樣例輸入
100 7
1 101 1
2 1 2
2 2 3
2 3 3
1 1 3
2 3 1
1 5 5
樣例輸出
3
#include
using namespace std;
bool true=1,false=0;
int n;
int a_list[20][3]; //參照表
int last=0;
bool judge(int d,int x,int y);
int main()
cout<<"\nthe number of lie is:"<
return 0; }
bool judge(int d,int x,int y)
} if(x!=y)
//新建對照組
return true; }
這道題目看似很複雜,但是只要提取其中的限制條件就可以很容易解答出來。而限制條件就是題目明確給出的對於假話的3條定義。
首先要注意的是,這裡的食物鏈是不同於現實中的食物鏈,它是乙個環形的,例如:1能吃2,2能吃3,那麼這裡隱含的就是:3能吃1,而不是1能吃3。
為了判斷當前句子是否和之前的真話有衝突,我們需要對有捕食關係的動物進行記錄,並且在記錄的過程中就把隱含的關係一併推出來和記錄進去。
球隊「食物鏈」
某國的足球聯賽中有n支參賽球隊,編號從1至n。聯賽採用主客場雙迴圈賽制,參賽球隊兩兩之間在雙方主場各賽一場。聯賽戰罷,結果已經塵埃落定。此時,聯賽主席突發奇想,希望從中找出一條包含所有球隊的 食物鏈 來說明聯賽的精彩程度。食物鏈 為乙個1至nnn的排列,滿足 球隊t1戰勝過球隊t2t 2t 2 球隊...
食物鏈 待解決
description 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a b吃c,c吃a。現有n個動物,以1 n編號。每個動物都是a,b,c中的一種,但是我們並不知道它到底是哪一種。有人用兩種說法對這n個動物所構成的食物鏈關係進行描述 第一種說法是 1 x y 表示x和y是同類...
並查集 食物鏈
noi2001,水題,但是我調了很久。食物鏈time limit 1000ms memory limit 10000k total submissions 27766 accepted 8066 description 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a吃b,b吃...