經典的並查集演算法
輸入
每個測試點(輸入檔案)有且僅有一組測試資料。
每組測試資料的第1行為乙個整數n,表示黑叔叔總共進行的操作次數。
每組測試資料的第2~n+1行,每行分別描述黑叔叔的一次操作,其中第i+1行為乙個整數op_i和兩個由大小寫字母組成的字串name1_i, name2_i,其中op_i只可能為0或1,當op_i=0時,表示黑叔叔判定name1_i和name2_i是同一陣營的,當op_i=1時,表示黑叔叔希望知道name1_i和name2_i是否為同一陣營的。
對於100%的資料,滿足n<=10^5, 且資料中所有涉及的人物中不存在兩個名字相同的人(即姓名唯一的確定了乙個人),對於所有的i,滿足name1_i和name2_i是不同的兩個人。
輸出
對於每組測試資料,對於黑叔叔每次op_i=1的操作,輸出一行,表示查詢的結果:如果根據已知資訊(即這次操作之前的所有op_i=0的操作),可以判定詢問中的兩個人是同一陣營的,則輸出yes,否則輸出no。
ac**:
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define size 100005
int isunion[size];
map a2i;
int n;
int op;
string name1, name2;
int find(int idx) else
}void merge (int idx1, int idx2)
bool check (int idx1, int idx2)
int main (int args, char* argv)
//fclose(stdin);
return
0;}
hihoCoder 1066 無間道之並查集
這題的話我們讀入可以用cin這樣避免混合輸入時的錯誤,雖然慢一點點,但是我們也可以關閉和stdio 的同步,這樣就不慢了。對於主函式來說,查詢的時候,如果兩個名字都不存在,那麼find 0 find 0 那就會輸出yes,所以對於有任意乙個為0的情況,我們就輸出no。我們也可以先編號後操作,兩種寫法...
1066約瑟夫問題
時間限制 10 sec 記憶體限制 128 mb 提交 1 解決 1 提交 狀態 討論版 約瑟夫問題 有 只猴子,按順時針方向圍成一圈選大王 編號從 到 從第 號開始報數,一直數到 數到 的猴子退出圈外,剩下的猴子再接著從1 開始報數。就這樣,直到圈內只剩下乙隻猴子時,這個猴子就是猴王,程式設計求輸...
hdu 1066 數學相關
詳細說明 include include include using namespace std char s 1005 int len,mp 25 直接計算出其迴圈節為20這裡將0 19的列表於上,當n 5時直接輸出,其餘需要遞迴n 5因為這個表是刪除了所有的5的倍數的 int slove ret...