演算法分析 第二次上機 Butterfly

2021-08-09 14:56:26 字數 1672 閱讀 5582

總時間限制: 

1000ms 

單個測試點時間限制: 

100ms 

記憶體限制: 

65536kb

描述 有一群旅行愛好者,有一天,他們帶回了n只蝴蝶回來。他們相信每乙隻都屬於兩個不同種類中的一種,為了討論方便,我們稱它們為a與b。他們想把n只標本分成兩組——一些屬於a且一些屬於b——但是直接標記任何乙個標本對於他們是非常困難,因此他們決定採用下面的方法。

對每對標本i和j,他們細心地把它們放到一起研究。如果他們以自己的判斷足以確信,那麼他們把這對蝴蝶標記為「相同」(這意味著他們相信這兩隻來自同一類)或者是「不同」(這意味著他們相信這兩隻來自不同的類)。他們也可以對某些標本判斷不出來而棄權,在這種情況下,我們稱這對標本是不明確的。

現在他們有n只標本的集合,還有對那些沒有棄權的標本對的m個判斷的集合(「相同」或者「不同」)。他們想知道這個資料與每只蝴蝶來自a和b中的乙個類的想法是否一致。更具體地說,如果對每對蝴蝶按照下述方式標記a或b是可能的,即對每個標為「相同」的(i,j)對,就是i與j有相同標記的情況;對每個標為「不同」的(i,j)對,就是i與j有不同標記的情況。那麼我們可以說這m個判斷是一致的。他們正在冥思苦想自己的判斷是否是一致的。請你幫他們設計合理的演算法解決該問題。

輸入輸入包含多組資料,以檔案結束符為終止。

每組資料第一行為兩個整數,分別是n和m:

n為蝴蝶的數量,編號從0到n-1

m為關係的數量

接下來是m組關係資料,每組資料佔一行,為三個整數,前兩個整數表示蝴蝶的編號,第三個整數為關係的種類(相同或者不同):

0為相同,1為不同

1 < n <= 1000

1 < m <= 100000

輸出合理就輸出yes

不合理就輸出no

樣例輸入

3 3

0 1 0

1 2 1

0 2 1

3 30 1 0

1 2 1

0 2 0

樣例輸出

yes

no

提示注意輸出的大寫和回車

可以使用bfs與並查集。

注意bfs使用時,壓入佇列的數值要標為已訪問,否則會導致節點多次壓入佇列,造成ttl。另外,輸入結束符為eof,否則會re。

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

int relation[1005][1005];

bool visited[1005];

bool type[1005];

int main()

//還有未訪問的點時訪問

int visnum = 0;

queueq;

while(visnum != n)

break;

case 1:

if(!visited[j])

break;}}

}}

bool flag = true;

for(int i = 0; i < n; i++)}}

}if(flag)

printf("yes\n");

else

printf("no\n");

}return 0;

}

第二次上機

題目 1 已知乙個矩陣,儲存在乙個二維陣列中。將矩陣中和值為最大的那一行 元素與首行對換。利用陣列進行操作 include include using namespace std intmain 乙個4 4的矩陣 cout 請輸入 vector int s n 儲存和 int m 和值最大的行 fo...

第二次c 上機

檔名稱 求三個整數中的最大數 作 者 範俊濤 完成日期 2016 年3 月10 日 版 本 號 v1.0 對任務及求解方法的描述部分 輸入描述 任意輸入三個整數 問題描述 略 程式輸出 最大的整數 問題分析 略 演算法設計 多個if else語句應用 初步了解了多個if else 語句的使用法,中間...

第二次上機實驗

檔名稱 ex1 2.cpp 作 者 莫洋 完成日期 2016 年 3 月 14 日 版 本 號 v1.0 對任務及求解方法的描述部分 輸入描述 無 問題描述 運用函式 程式輸出 略 問題分析 略 演算法設計 略 include includeint ispalindrome int int reve...