CCF 201503 5 最小花費

2021-09-26 18:57:04 字數 970 閱讀 3408

簡單說下思路,由題意知輸入的資料必然構成一棵樹,所以就不用什麼判斷最短路徑了,直接遍歷節點,找到s到t的路徑,逐漸更新過程中最小的單價,一直按照最小的單價購買食物。

技巧:這道題發現每兩個城市之間只有唯一一條路徑後思路就很明白了,因為題目說的n個城市有n-1條邊,所以必然構成一棵樹,一棵樹裡面任意兩個節點的路徑唯一。

所以**比較簡潔,但是效能有待優化。

#include

#include

#include

#include

using namespace std;

typedef long long ll;

const ll inf

=1e18

;const int maxn

=50010

;struct node;}

;struct c;c

(int v,ll minw):u

(v),

minw

(minw);}

;vector adj[

maxn];

bool inq[

maxn];

ll cost[

maxn];

ll minw;

ll a[

maxn]=

;queue q;

void

dfs(int s,int end)}}

}int main()

for(int i =

0;i1;i++

)for

(int i =

0;i)return0;

}

CCF201503 5 最小花費 一種思路

這道題看到網上的題解基本都用dfs,但是可能會超時。所以我想可以先用尤拉序和rmq處理一下,然後對於每一次詢問求出起點終點的lca,再把整個路徑分為從起點到lca,lca到終點兩部分處理。我用的python,最後只得了10分。說是執行錯誤。這個方法我覺得還是對的,自己弄了個比較麻煩的樣例也對了。然後...

最小花費 Dijkstra

原題鏈結傳送門 d es crip tion description descri ptio n在n個人中,某些人的銀行賬號之間可以互相轉賬。這些人之間轉賬的手續費各不相同。給定這些人之間轉賬時需要從轉賬金額裡扣除百分之幾的手續費,請問a最少需要多少錢使得轉賬後b收到100元。i np ut inp...

砍樹最小花費

題意 有n種樹,每種樹給出高度h,砍掉每顆樹的花費c,每種樹的數量p,現在要砍掉一些樹,使得最高的樹的數量超過所有樹的一半,問最小花費。不同種類的樹高度可能相同 題解 列舉不同的高度,把高於它的樹都砍掉,然後比它矮的樹挑便宜的砍,使得該高度的樹佔所有樹的1 2 1。給樹按高度排序,首先可以用字尾和預...