牛客演算法周周練3 C 小雨坐地鐵 分層最短路

2022-05-03 12:12:15 字數 2321 閱讀 7567

思路:

\(dp[i][j]\) 表示到第\(\mathit i\)個節點時在第\(\mathit j\)個地鐵上的最小花費。

然後\(dijkstra\)演算法跑最短路即可,

轉移有\(\text 2\)種情況:

1️⃣:換到地鐵線路i 且走了乙個節點,\(cost=a_i+b_i\)

2️⃣:不換地鐵線路,繼續在第\(\mathit i\)個地跌線路上走:\(cost=b_i\)

還需要判斷\(s=t\)的適合答案是\(\text 0\)。

**:

#include #include #include #include #include #include #include #include #include #include #include #include #include #include // #include #define all(x) (x).begin(), (x).end()

#define sz(a) int(a.size())

#define rep(i,x,n) for(int i=x;i#define pll pair#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)

#define ms0(x) memset((x), 0, sizeof((x)))

#define msc0(x) memset((x), '\0', sizeof((x)))

#define pb push_back

#define mp make_pair

#define fi first

#define se second

#define eps 1e-6

#define chu(x) if(debug_switch) cout<<"["<<#x<<" "<<(x)<<"]"<>= 1;} return ans;}

ll poww(ll a, ll b) ll ans = 1; while (b) a = a * a ; b >>= 1;} return ans;}

void pv(const vector&v) else }}

void pvl(const vector&v) else }}

inline long long readll() while (c >= '0' && c <= '9') tmp = tmp * 10 + c - 48, c = getchar(); return tmp * fh;}

inline int readint() while (c >= '0' && c <= '9') tmp = tmp * 10 + c - 48, c = getchar(); return tmp * fh;}

void pvarr_int(int *arr, int n, int strat = 1) repd(i, strat, n) }

void pvarr_ll(ll *arr, int n, int strat = 1) repd(i, strat, n) }

const int maxn = 3000 + 10;

const int inf = 0x3f3f3f3f;

/*** template code * * starts here ***/

#define debug_switch 0

int dp[maxn][502];

struct node

node(int ff, int tt, int vv, int ii)

bool operator < (const node & b) const

};priority_queueheap;

int n, m;

int s, t;

int a[maxn];

int b[maxn];

std::vectorv[maxn];

void add_edge(int x, int y, int id)

void dij()

}heap.push(node(0, s, 0, 0));

node temp;

while (!heap.empty())

else

if (dp[y.t][y.id] > dp[temp.t][temp.id] + plus)}}

}int main()

}dij();

int ans = inf;

repd(i, 1, m)

if (s == t)

ans = 0;

printf("%d\n", ans == inf ? -1 : ans );

return 0;

}

牛客演算法周周練3

只寫了乙個,打遊戲去了 就是個搜尋模板,直接寫就行 include include include include include include using namespace std define mid 1000000007 typedef long long ll int book 106 ...

牛客演算法周周練2

a 題意 求乙個數的順序和逆序之和。題解 其實就是個閹割版的高精度加法嘛。其實逆序數忽略前導零這個條件是沒有用的,因為順序數不可能有前導零,自然結果也不會有,然後注意下首位進製不取餘。include using namespace std int a 10 b 10 intmain for k j ...

牛客演算法周周練2

題目鏈結 include define sc x scanf lld x define pf printf define rep i,s,e for int i s i e i define dep i,e,s for int i e i s i using namespace std typede...