思路:
\(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...