spfa vijos1901 學姐的錢包

2022-05-28 02:51:10 字數 1955 閱讀 6506

學姐每次出門逛街都要帶恰好m元錢, 不過她今天卻忘記帶錢包了.

可憐的doc只好自己湊錢給學姐, 但是他口袋裡只有一元錢.

好在doc的n位朋友們都特別有錢, 他們答應與doc作一些交換.

其中第i位朋友說:

如果doc有不少於ri元錢,

doc可以把手上所有的錢都給這位朋友,

並從這位朋友手中換回vi元錢,

但是這次交換會浪費ti的時間.

doc希望可以在最短的時間內換到m元錢(其實是可以大於m的, 因為doc可以存私房錢呢), 否則學姐會生氣的!

輸入資料第一行給定t, 表示總的詢問次數.

對於每一次詢問, 第一行給出兩個整數n和m.

之後n行, 每一行給出三個整數vi, ri和ti. (保證ri<=vi).

對於每一次詢問, 首先輸出詢問的編號, 參見樣例輸出.

之後輸出最小需要的時間, 如果不可能完成目標, 則輸出-1.

3

5 95 1 1

10 4 10

8 1 10

11 6 1

7 3 8

4 52 1 1

3 2 1

4 3 1

8 4 1

3 10

5 1 3

8 2 5

10 9 2

case #1: 10

case #2: 4

case #3: -1

對於40%的資料

n <= 1500.

對於100%的資料

t <= 5

1 <= n <= 100000.

1 <= m <= 1000000000.

1 <= ri <= vi <= 1000000000.

1 <= ti <= 1000000000.

蒟蒻並沒有看懂sdfzgxk的題解orz……

然而看到了這樣一句話「用f[i]表示從大於等於m的點到i的最短時間」

這……好像可以單源最短路,翻sdfzwxl的題解,可寫

並不清楚long long下怎麼賦極值

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7int

t,n,m,cnt,tot;

8struct

dtroad[200010

]; 12

struct

dataedge[400010

];16

int num[400010],head[200010

];17

long

long w[200010

];18

bool check[200010

];19 queueq;

20void add(int start,int end,long

long

dd)26

void

spfa()42}

43}44}

45int

main()

59 sort(num+1,num+cnt+1

);60 cnt=unique(num+1,num+cnt+1)-num-1;61

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

66for(int i=2;i<=cnt;i++) add(i,i-1,0

);67

spfa();

68if(w[cnt]==0x3f3f3f3f) printf("

case #%d: -1\n

",ii);

69else printf("

case #%d: %lld\n

",ii,w[cnt]);70}

71return0;

72 }

1901 賞賜 OR 災難

time limit 1 sec memory limit 128 mb submitted 418 solved 110 大g南征北戰終於打下了大片土地成立了g國,大g在開國大典上傳召幫助自己南征北戰的三大開國元勳小a,小b,小c進殿,並要賞賜三人大量寶物以顯示天恩浩蕩。大g在征服其他國家的時候搶...

vue 使用技巧總結 19 01

上面的函式中使用箭頭,會導致 this 捕獲不到 vue 例項。各位道友切記切記.目前通常使用的方式是 然後在查資料的時候翻到了乙個統一管理的方式 asynccomponent.js 檔案 export const component01 import views export const comp...

vijos1901 學姐的錢包

學姐每次出門逛街都要帶恰好m元錢,不過她今天卻忘記帶錢包了.可憐的doc只好自己湊錢給學姐,但是他口袋裡只有一元錢.好在doc的n位朋友們都特別有錢,他們答應與doc作一些交換.其中第i位朋友說 如果doc有不少於ri元錢,doc可以把手上所有的錢都給這位朋友,並從這位朋友手中換回vi元錢,但是這次...