比赛 |
2025暑期集训第5场图论专场 |
评测结果 |
AAAAAAAAAA |
题目名称 |
Milk Pumping |
最终得分 |
100 |
用户昵称 |
ChenBp |
运行时间 |
0.171 s |
代码语言 |
C++ |
内存使用 |
3.72 MiB |
提交时间 |
2025-07-09 11:18:23 |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <queue>
#include <map>
#include <cstring>
#define ll long long
#define min(a,b) (((a)<(b))?(a):(b))
using namespace std;
const ll N=1e3+3;
ll head[N],nxt[N*2],to[N*2],c[N*2],f[N*2],num=0;
void add(ll x,ll y,ll c1,ll c2) {
num++;
to[num]=y;
c[num]=c1;
f[num]=c2;
nxt[num]=head[x];
head[x]=num;
}
ll disc[N];
const ll e6=1e6;
int main() {
freopen("pump.in","r",stdin);
freopen("pump.out","w",stdout);
ll n,m;
cin>>n>>m;
for(ll i=1; i<=m; i++) {
ll u,v,c1,c2;
cin>>u>>v>>c1>>c2;
add(u,v,c1,c2);
add(v,u,c1,c2);
}
ll bc=1e15,bf=0;
for(int mid=1;mid<=1000;mid++) {
memset(disc,0x3f,sizeof(disc));
priority_queue<pair<ll,ll> >q;
q.push(make_pair(0,1));
disc[1]=0;
while(!q.empty()) {
ll u=q.top().second;
q.pop();
for(ll i=head[u]; i; i=nxt[i]) {
ll v=to[i];
if(f[i]<mid) continue;
ll nc=disc[u]+c[i];
if(nc<disc[v]) {
disc[v]=nc;
q.push(make_pair(-nc,v));
}
}
}
if(disc[n]<1e15) {
if(bf*disc[n]<mid*bc) {
bf=mid;
bc=disc[n];
}
}
}
cout<<bf*e6/bc;
return 0;
}