poj1062 昂貴的聘禮interesting

2021-07-25 02:37:12 字數 1077 閱讀 6077

ps:自己想的時候感覺很逗,感覺會有負環spfa想了兩天,想好之後就在想**實現,天額,兩天都沒想明白如何實現..t-t,還是去網上搜了一發

思路:其實dijk就可以了,對於所有的點,我們求出到1這個點的單元最短路徑,當然這個題重點是圖的構建。

對於每個物品的貨主來說,如果當前這個物品可以用其他物品換得,並且換得物品的地位的主人與他相差不超過給定值,我們就可以認為這兩個點有邊,且連通可達。

接下來我們在每個點構建最短路徑的時候,我們假設這個點是地位最低的,依次根據來構建最短路,那麼我們只可以選擇地位在good[1].level-m的點上面的貨主,

並且我們列舉的點不可以找過good[1].level。

接下來是dijkstra的過程:

既然我們構建了最短路,然而我們當初存圖的時候只是單單判斷u ,->v 是否可達,並沒有判斷起點到v是否可達,也就是說如果拿到的當前點index的地位是大於開始點m,那麼我們雖然拿到了這個點是最短路徑,也不可以進行鬆弛。

題真的很interesting

#include #include #include #include using namespace std;

#define inf (0x3f3f3f3f)

const int maxn = 105;

int m, n;

struct goods

goods[maxn];

int map[maxn][maxn];

int cost[maxn];

bool vis[maxn];

int dijk(int x)

vis[0] = true;

for (int i=0; i= level)

cost[j] = min(cost[j],cost[index] + map[index][j]);

} }return cost[1];

}int main()}}

} int minn = inf;

for (i=1; i<=n; i++)

}printf("%d\n", minn);

} return 0;

}

poj 1062 昂貴的聘禮

這個題是乙個簡單的樹形dp,只是有乙個地位差限制,可以列舉可行區間,在可行區間裡進行dp.include include include include include include include include include include includeusing namespace st...

poj1062 昂貴的聘禮

做這題代價確實很昂貴,從昨天晚上一直到今天上午都在debug,今天上午提交還出現各種wa。比較明顯的最短路,有幾個地方要注意一下,首先建圖有個地方要注意以下,這題是用臨界矩陣儲存的有向圖,而且是由交換品指向購買品,然後將虛節點設為購買品的價值,最後列舉每乙個可能地位區間di求最短路,因為對於區間 c...

昂貴的聘禮(POJ1062)

這個玩了好久啊,是我第一次寫出這樣的最短路徑。還是參考了其它人的才出來,注意的有 1 是單向圖,2 把不滿足權值的提前全初始化。其實不用topo排序也可的。關鍵 void dfs int k include include include include include include includ...