計蒜客成仙之路

2021-08-20 10:00:35 字數 1328 閱讀 9877

第一行是兩個整數 ,依次表示修為等級差距限制和m,n(1< =m< =20,1< =n< =20000)物品的總數。接下來按照編號從小到大依次給出了n個物品的描述。每個物品的描述開頭是p,l,x三個非負整數 ( x< n),依次表示該物品的代價、主人精靈的修為等級和替代品總數。接下來x 行每行包括兩個整數t 和v ,分別表示替代品的編號和「***格」。(σx< =200000) 

輸出格式

對於每個測試資料,在單獨一行內輸出最少需要的精靈寶石數。 

樣例輸入

1 4 

10000 3 2 

2 8000 

3 5000 

1000 2 1 

4 200 

3000 2 1 

4 200 

50 2 0 

樣例輸出

5250

思路:方案一:我們在乙個物品及其優惠商品間增加一條路徑,該路徑的值為負,即其***格。同時我們給每個節點都設定乙個權值,即其代價,達到此點時需要消耗這樣的代價。這樣,每個點到根節點的路徑長度,實際上就是經過一系列轉換後(最後一次轉換是獲得此節點)所需要的寶石。這樣,我們求出每個點到根節點的最短路,再找出其中最短的一條最短路,就是答案了。

方案二:新建乙個點0,表示什麼都還沒有,也就是起點,每乙個物品作為乙個點,到了這個點表示我當前手上拿的就是這個物品,0向其它的點連邊,邊權為物品本身的價值,表示我可以直接購買,可以替換的就連有向邊,邊權為替換的價錢,最後所求的就是從0到1的最短路。

比較一下兩種方案,事實上並沒有什麼區別。。。。。。但方案二提供了乙個超級源的思路,可以借鑑。

**:

#includeusing namespace std;

const int n=20010; const int m=250010;

struct way way[m];

int c,n,m,k,a,cnt,cur,ans,minn,r,l,head[n],cost[n],grade[n],dis[n],num[n];

void add(int u,int v,int w)

queueq;

void spfa(int st,int low)

for(int i=head[cur];i;i=way[i].next)

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

ans=min(ans,dis[i]);

}int main()

} ans=cost[1];

for(int i=l;i+c<=r;i++)

spfa(1,i);

printf("%d",ans);

return 0;

}

計蒜客 2019計蒜之道D

題意 現在給定你乙個字串 s ss 以及乙個整數 k kk,請求出 s ss的字典序最小的長度為 k kk的子串行。資料範圍 0 s 5000000 00 s 5000 000 樣例輸入 helloworld 5樣例輸出 ellld思路 假如我們先不考慮長度為k的限制我們應當怎麼做?我們以樣例為例子...

計蒜客 解碼

蒜頭君自己發明了一種字串的編碼方式,對於只含有大小寫字母的字串,可以用數字來表示括號裡面的串連續出現的次數 數字有可能超過一位數 比如a abcd 2等價於aabcdabcd。特別地,如果數字前面沒有括號,表示緊貼數字的前面的 乙個字母 出現的次數。比如abc2表示abcc。為了降低解碼的難度,蒜頭...

計蒜客 郊遊

蒜頭君成為了計蒜客附屬幼兒園的一名老師,乙個陽光明媚的週末,蒜頭君帶領著小朋友們去野外郊遊。一共有 2n2n 個小朋友,正好是 n n 個男孩和 n n 個女孩。蒜頭君讓小朋友分組玩遊戲,每組乙個男孩和乙個女孩,但是有些女孩比較討厭某些男孩,不願意和他們分在一組,男孩覺得和誰分在一組都無所謂。你能告...