題目1035:找出直系親屬
時間限制:1 秒
記憶體限制:32 兆
特殊判題:否
提交:1738
解決:706
題目描述:如果a,b是c的父母親,則a,b是c的parent,c是a,b的child,如果a,b是c的(外)祖父,祖母,則a,b是c的grandparent,c是a,b的grandchild,如果a,b是c的(外)曾祖父,曾祖母,則a,b是c的great-grandparent,c是a,b的great-grandchild,之後再多一輩,則在關係上加乙個great-。
輸入:輸入包含多組測試用例,每組用例首先包含2個整數n(0<=n<=26)和m(0
輸出:如果詢問的2個人是直系親屬,請按題目描述輸出2者的關係,如果沒有直系關係,請輸出-。
具體含義和輸出格式參見樣例.
樣例輸入:
3 2abccde
efgfa
be0 0
樣例輸出:
great-grandparent-
2023年浙江大學計算機及軟體工程研究生機試真題
解題思路: 一看 會覺得的這個題要麼和二叉樹的樹形結構有些關係 ,但是呢 如果用二叉樹又不太好處理 , 正好有一種方式 和這道題很像 那就是並查集:
首先,題目問的是最後兩者的關係 父子關係還是 什麼關係什麼的 ,那和並查集裡面查詢兩者的關係很相似 ,在於什麼呢,在於要記錄多少代問題,這裡給出了一種用計數的方式解決
其次: 輸入時輸入兩個 或者三個字母, 表示他們之間的關係,因此 現在就是要把他們的關係整合一下 ,這個和並查集裡面 的union很像 因此就行到用並查集相關問題解決了。。。
下面給出**: 細節部分會在**裡面給出說明
最近有點小忙, 雖然每天堅持寫**,但是效率不是很高,可能是最近太累了吧,我會努力調整到最佳狀態,每天以最陽光,最有效率的一面去生活!
好吧這道題糾結了我好幾天 ,一直找bug 一直沒找到, 後然看了下別人的部落格 修改了下,已經成功ac
#include#include#includeusing namespace std;
int child[30];//表示孩子的數目
int find(int x , int y)
x = child[x];
res++;//
}//這裡是用迴圈進行求解的 也可以用遞迴進行求解,不過就是會麻煩一些
//經過上面的迴圈,一定會出現兩種結果要麼找到他們之間有關係,要麼麼他們之間沒有任何關係
if(child[x]== y)
else
}int main()
if(buf[2] != '-')
}for(int j = 0 ; j < n ;j++)
else if(ans1 != -1)
printf("grandparent\n");
break;}}
else if (ans2 != -1)
printf("grandchild\n");
break;}}
}}
return 0;
}
九度1035 找出直系親屬《並查集》
題目描述 如果a,b是c的父母親,則a,b是c的parent,c是a,b的child,如果a,b是c的 外 祖父,祖母,則a,b是c的grandparent,c是a,b的grandchild,如果a,b是c的 外 曾祖父,曾祖母,則a,b是c的great grandparent,c是a,b的grea...
ACM 九度1012 1109 並查集
題目 暢通工程 思路 類似於kruskal演算法對資料進行預處理,分成不同集合,集合個數減一就是答案 1109 只要判斷最後集合個數是否為1即可 感悟 尋找根節點時,進行了 路徑壓縮 即在查詢過程中,路徑上所有點的父節點都重新賦值,直接指向根節點 這樣有效降低搜尋樹的高度,提高了效率 include...
九度OJ 朋友圈 並查集
題目描述 假如已知有n個人和m對好友關係 存於數字r 如果兩個人是直接或間接的好友 好友的好友的好友.則認為他們屬於同乙個朋友圈,請寫程式求出這n個人裡一共有多少個朋友圈。假如 n 5 m 3 r 表示有5個人,1和2是好友,2和3是好友,4和5是好友,則1 2 3屬於乙個朋友圈,4 5屬於另乙個朋...