样例都过不去,和大部分题解的思路基本上都是一样的
#include <climits>
#include <cstring>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
#define int long long
const int maxn = 510;
struct node {
int v, w, flow;
node(int vv, int ww, int fflow) {
v = vv;
w = ww;
flow = fflow;
}
};
vector<node> g[maxn];
int c[maxn];
int n, m, x;
queue<int> q;
bool inqueue[maxn];
int d[maxn];
void spfa(int maxflow) {
memset(inqueue, 0, sizeof(inqueue));
memset(d, 0x3f, sizeof(d));
d[1] = 0;
q.push(1);
inqueue[1] = true;
while (!q.empty()) {
int u = q.front();
q.pop();
inqueue[u] = false;
for (int i = 0; i < g[u].size(); i++) {
int v = g[u][i].v;
if (g[u][i].flow <= maxflow && d[v] > d[u] + g[u][i].w) {
d[v] = d[u] + g[u][i].w;
if (!inqueue[v]) {
q.push(v);
inqueue[v] = true;
}
}
}
}
}
signed main() {
cin >> n >> m >> x;
for (int i = 1; i <= m; i++) {
int u, v, w, flow;
cin >> u >> v >> w >> flow;
g[u].push_back(node(v, w, flow));
g[v].push_back(node(u, w, flow));
c[i] = flow;
}
int ans = LLONG_MAX;
for (int i = 1; i <= n; i++) {
spfa(c[i]);
ans = min(ans, d[n] + x / c[i]);
}
cout << ans << endl;
return 0;
}