題目:郵遞員
描述:郵局需要你來幫助他們為某個郵遞員設計出一條能夠穿過那遙遠鄉村的所有村子和小路至少一次的郵路(輸入資料將會保證這麼一條路是一定存在的)。
但是,每條路線都是有乙個花費的。各個村子裡的村民希望郵遞員到達他們村子的時間越早越好。因此,各個村子裡的人們採用了一些措施:假設第i號村子是郵遞
員在他的郵遞路線上到達的第k個村子。如果k<=w( i ),那麼這個村子的村民就會付給郵局w( i
)-k歐元。當然,如果k>w(i),郵局也同意付k- w( i
)歐元給這個村子,對某些村子重複經過要重複收費。此外,郵遞員每經過一條小路,郵局也要付給郵遞員1歐元作為補貼。
現在有n個村子,編號依次為1到n。郵局就位於1號村子,因此郵遞員的傳遞路線從這裡開始,也從這個村子結束。能夠離開每個村子的路口的數目一定是2,4或者8。這裡允許出現同樣的村子間存在多條小路,或者某條小路構成了乙個自環的情況。
你的任務是設計乙個路線使得郵局賺的錢最多(或者說賠的錢最少。如果有多種最優解,輸出字典序最小的。
第一行:兩個整數n,m,分別表示村子的數量和小路的數量。
接下來n行,每行乙個整數:w(i)(1≤w(i)<1000)
接下來m行,每行兩個整數u,v,表示這條小路連線的村子的編號。
第一行:乙個整數k,你的程式所設計的路徑的長度
第二行:k+1個整數,v1,v2…vk+l,每個數之間用乙個空格隔開,表示你設計的路徑所經過的村子的編號,其中需要滿足v1=vk+1=1
carrier.in
6 7
1 7
4 10
20 5
2 4
1 5
2 1
4 5
3 6
1 6
1 3carrier.out
7 1 2 4 5 1 3 6 1
對於30%的資料,有n<=20
對於100%的資料,有n<=200;
補充說明:郵遞員每條路線都要去送信,並且每條線路只要送一次就可以了。
解析:ac**:
programview codezht;
vari,t,n,m,x,y,ans,tn:longint;
a:array[0..1000000] of
longint;
map:
array[0..200,0..200] of
longint;
procedure
dfs(x:longint);
vari:longint;
begin
for i:=1
to n do
if map[x,i]>0
then
begin
inc(ans);
dec(map[x,i]);
dec(map[i,x]);
dfs(i);
end; inc(tn);
a[tn]:=x;
end;
begin
assign(input,
'carrier.in');
assign(output,
'carrier.out');
reset(input);
rewrite(output);
readln(n,m);
for i:=1
to n do
readln(t);
for i:=1
to m do
begin
readln(x,y);
inc(map[x,y]);
inc(map[y,x]);
end;
dfs(1);
writeln(ans);
for i:=tn downto1do
write(a[i],''
);close(input);
close(output);
end.
尤拉迴路 Jzoj P1319 郵遞員
description 郵局需要你來幫助他們為某個郵遞員設計出一條能夠穿過那遙遠鄉村的所有村子和小路至少一次的郵路 輸入資料將會保證這麼一條路是一定存在的 但是,每條路線都是有乙個花費的。各個村子裡的村民希望郵遞員到達他們村子的時間越早越好。因此,各個村子裡的人們採用了一些措施 假設第i號村子是郵遞...
郵遞員送信
題目描述 有乙個郵遞員要送東西,郵局在節點1.他總共要送n 1樣東西,其目的地分別是2 n。由於這個城市的交通比較繁忙,因此所有的道路都是單行的,共有m條道路,通過每條道路需要一定的時間。這個郵遞員每次只能帶一樣東西。求送完這n 1樣東西並且最終回到郵局最少需要多少時間。輸入輸出格式 輸入格式 第一...
尤拉迴路 輸出尤拉迴路的路徑
有向or無向均可,重邊 step1 從u開始,找到與他相連的v,放入棧,刪除 u,v 這條邊,然後從v開始 step2 當有一點沒有與他相連的點時,放入path,然後從stack取棧頂繼續開始找點刪邊。最後記得把棧裡的點放到path中。path倒序輸出 需要先找到起點 鄰接表法,適合稀疏圖 incl...