尤拉迴路 Jzoj P1319 郵遞員

2022-07-24 05:36:12 字數 1136 閱讀 7619

description

郵局需要你來幫助他們為某個郵遞員設計出一條能夠穿過那遙遠鄉村的所有村子和小路至少一次的郵路(輸入資料將會保證這麼一條路是一定存在的)。

但是,每條路線都是有乙個花費的。各個村子裡的村民希望郵遞員到達他們村子的時間越早越好。因此,各個村子裡的人們採用了一些措施:假設第i號村子是郵遞員在他的郵遞路線上到達的第k個不同的村子。如果k<=w( i ),那麼這個村子的村民就會付給郵局w( i )-k歐元。當然,如果k>w(i),郵局也同意付k- w( i )歐元給這個村子,重複經過村子不重複收費。此外,郵遞員每經過一條小路,郵局也要付給郵遞員1歐元作為補貼。

現在有n個村子,編號依次為1到n。郵局就位於1號村子,因此郵遞員的傳遞路線從這裡開始,也從這個村子結束。能夠離開每個村子的路口的數目一定是2,4或者8。這裡允許出現同樣的村子間存在多條小路,或者某條小路構成了乙個自環的情況。

你的任務是設計乙個路線使得郵局賺的錢最多(或者說賠的錢最少。如果有多種最優解,輸出字典序最小的。

input

第一行:兩個整數n,m,分別表示村子的數量和小路的數量。

接下來n行,每行乙個整數:w(i)(1≤w(i)<1 000)

接下來m行,每行兩個整數u,v,表示這條小路連線的村子的編號。

output

第一行:乙個整數k,你的程式所設計的路徑的長度

第二行:k+1個整數,v1,v2…vk+l,每個數之間用乙個空格隔開,表示你設計的路徑所經過的村子的編號,其中需要滿足v1=vk+1=1

sample input

6 717

410205

2 41 5

2 14 5

3 61 6

1 3

sample output

7

1 2 4 5 1 3 6 1

hint

1 #include 2 #include 3

#define n 210

4using

namespace

std;

5int

n,m,cnt,w[n],f[n][n],ans[n];

6void dfs(intx)7

11int

main()

12

尤拉迴路 郵遞員

題目 郵遞員 描述 郵局需要你來幫助他們為某個郵遞員設計出一條能夠穿過那遙遠鄉村的所有村子和小路至少一次的郵路 輸入資料將會保證這麼一條路是一定存在的 但是,每條路線都是有乙個花費的。各個村子裡的村民希望郵遞員到達他們村子的時間越早越好。因此,各個村子裡的人們採用了一些措施 假設第i號村子是郵遞 員...

尤拉迴路 輸出尤拉迴路的路徑

有向or無向均可,重邊 step1 從u開始,找到與他相連的v,放入棧,刪除 u,v 這條邊,然後從v開始 step2 當有一點沒有與他相連的點時,放入path,然後從stack取棧頂繼續開始找點刪邊。最後記得把棧裡的點放到path中。path倒序輸出 需要先找到起點 鄰接表法,適合稀疏圖 incl...

尤拉迴路 UOJ117 尤拉迴路 題解

判斷無向圖和有向圖是不是尤拉迴路。如果是,求出任意一條尤拉迴路。判斷尤拉迴路 證明?我不會啊!怎麼求尤拉迴路呢?因為已經確定了是尤拉迴路,所以我們可以直接dfs瞎搞。隨便從乙個點開始dfs,一條邊走過後就刪除。回溯時將其入隊。最後的佇列反過來就是答案。原理 最後的佇列是返回路徑,所以反過來就是答案。...