CCF計算機軟件能力認證試題練習:201912-4 區塊鏈(未解決)

區塊鏈

來源:CCF

標籤:

參考資料:

相似題目:

題目

區塊鏈涉及密碼學、哈希算法、拜占庭問題、共識算法、故障模型、網絡模型等諸多知識,也在金融等領域有廣泛的應用。本題中,我們需要實現一個簡單的區塊鏈系統。
在一個分佈式網絡中,有n個節點通過m條邊相連,節點編號從1至n。每個節點初始化都有一個相同的“創世塊”,鏈長都爲1,每個節點在整個過程中都需要維護一條主鏈,任何操作都只在主鏈上進行。在整個系統中產生的每個新塊都有唯一的整數編號,創始塊的編號爲0,其餘塊的編號都爲正整數。當某個節點的鏈更新時,會將它的主鏈發送給它相鄰的節點(鄰居);而當節點收到鏈時,決定是否更新自己的主鏈下列情況可能會導致某個節點的鏈更新:
·某個節點接收到鄰居發送過來的鏈,與當前自己的主鏈進行比較:如果接收到的鏈更長,則將其作爲自己的主鏈;如果收到的鏈長度與自身主鏈相同,且最後一塊編號更小,則將其作爲自己的主鏈
如果接收到的鏈更短,則直接忽略該鏈。
·某個節點產生一個新塊,將新塊放在主鏈的尾部。
假設網絡帶寬足夠大,每個節點狀態更新後,會立刻將自己的主鏈同時發送給所有鄰居。每個節點在每個時刻總是先接收鏈,再產生新塊(注意這與實際的區塊鏈工作方式不相同),每個節點發送、接收、產生塊不消耗時間,只有在網絡中傳輸鏈會消耗時間。不過因爲一些故障,這個網絡可能會出現“分區”的情況,即出現多個子網絡,不同子網絡的節點無法互相收發消息
在計算機中常用邏輯時鐘來定義“時刻”,邏輯時鐘初始時間爲0,以單位1遞增。任意節點傳輸一條鏈到其鄰居所花費的時間相同,都爲1。現在已知整個網絡的結構以及每個節點產生新塊的時間,需要查詢特定時刻某個節點的主鏈。

輸入

從標準輸入讀入數據。
保證題中所有輸入均爲整數,並且所有整數絕對值不大於10^9。
第一行兩個正整數分別爲n,m,分別表示網絡的n個節點和m條邊。
接下來m行,每行2個正整數ui,vi,(1<=i<=m),表示網絡中節點ui和節點vi,具有(雙向)連接。
接下來一行兩個正整數t,k,分別表示每次傳輸延時,和操作(產生塊或查詢)的數量。
接下來k行,每行2或3個正整數:
如果是三個數a,b,c,表示節點a在b,時刻產生了一個編號爲ci的塊。保證bi<=bi+1(1<=i<=k)。
如果是兩個數ai,bi,表示查詢節點ai處理完bi時刻及以前的所有操作後的主鏈。保證對於同一時刻,任何查詢在輸入文件中都出現在當前時刻所有的新塊被產生之後。

輸出

輸出到標準輸出。
依次輸出若干行,分別對應每一次查詢。
每行第一個正整數L表示主鏈的長度,接下來L個數表示主鏈每個塊的編號。從鏈頭(一定爲0)到鏈尾依次輸出。

輸入樣例1

5 10
1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
4 5
1 27
1 1 1
2 1 2
3 1 3
4 1 4
5 1 5
1 1
2 1
3 1
4 1
5 1
1 2
2 2
3 2
4 2
5 2
1 10 10
2 11 9
1 11
2 11
3 11
4 11
5 11
1 12
2 12
3 12
4 12
5 12

輸出樣例1

2 0 1
2 0 2
2 0 3
2 0 4
2 0 5
2 0 1
2 0 1
2 0 1
2 0 1
2 0 1
3 0 1 10
4 0 1 10 9
3 0 1 10
3 0 1 10
3 0 1 10
4 0 1 10 9
4 0 1 10 9
4 0 1 10 9
4 0 1 10 9
4 0 1 10 9

樣例解釋1

網絡中的節點與連接關係形成一張完全圖。在時刻1時,所有節點都產生一個塊,所以查詢結果主鏈長度都爲2,主鏈更新後,將自己的主鏈發給所有鄰居。
因爲傳輸時間爲1,所以在時刻2時,所有節點都收到其他節點發來的主鏈並更新,更新後發送新的主鏈給鄰居。此時查詢所有節點,主鏈都爲01。
節點1在時刻10產生了新的塊10,併發送給鄰居。所有鄰居在時刻11時接收到節點1發送的塊10,同時,節點2在時刻11產生了新塊11,所以,時刻11時的節點2主鏈長爲4,其餘節點主鏈長爲3,所有發生更新的節點在時刻11時向鄰居發送自己的主鏈。
所以在時刻12時,所有節點的主鏈長爲4.

輸入樣例2

15 13
1 2
2 3
3 4
4 5
1 6
6 7
7 8
8 9
1 10
10 11
11 12
12 13
14 15
6 28
1 1 1
1 2 2
1 6
2 7
13 7
9 7
5 7
3 14
8 14
5 14
11 14
9 25
5 25
13 25
9 29 3
5 29 4
13 29 5
1 53
2 59 6
2 59
1 1000
3 1000
8 1000
9 1000
10 1000
13 1000
14 1000
15 1000

輸出樣例2

3 0 1 2
2 0 1
1 0
1 0
1 0
3 0 1 2
1 0
1 0
3 0 1 2
2 0 1
2 0 1
2 0 1
4 0 1 2 3
5 0 1 2 3 6
5 0 1 2 3 6
5 0 1 2 3 6
5 0 1 2 3 6
5 0 1 2 3 6
5 0 1 2 3 6
5 0 1 2 3 6
1 0
1 0

提示

在這裏插入圖片描述

解題思路

參考代碼


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章