社区讨论
为什么这个G的假做法过了
学术版参与者 19已保存回复 83
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 79 条
- 当前快照
- 1 份
- 快照标识符
- @mjuvl2mc
- 此快照首次捕获于
- 2026/01/01 11:18 2 个月前
- 此快照最后确认于
- 2026/01/03 17:50 2 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int INF=1e18+10,maxn=305,maxm=1005;
int n,m,h,t,Vct14[maxn],Alex_smy[maxn],c,chenhj123,Eason_cyx[maxm],eason_qwq[maxn],eason_oier[maxn];
struct LuoguUserCCL{int u,v,l,t;}Wei_ch[maxm];
vector<int>Happy_New_Year[maxn];
bool mamingcam(int T){
for(int i=0;i<m;i++)Eason_cyx[i]=Wei_ch[i].l;
chenhj123=c;
while(chenhj123>0){
for(int i=1;i<=n;i++)eason_qwq[i]=INF,eason_oier[i]=-1;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >mm1221;
eason_qwq[1]=0; mm1221.push(make_pair(0,1));
while(!mm1221.empty()){
int w=mm1221.top().first;
int u=mm1221.top().second;mm1221.pop();
if(w!=eason_qwq[u])continue;
for(int i=0;i<Happy_New_Year[u].size();i++){
int id=Happy_New_Year[u][i];
if(Eason_cyx[id]&&eason_qwq[Wei_ch[id].v]>w+Wei_ch[id].t){
eason_qwq[Wei_ch[id].v]=w+Wei_ch[id].t;
eason_oier[Wei_ch[id].v]=id;
mm1221.push(make_pair(eason_qwq[Wei_ch[id].v],Wei_ch[id].v));
}
}
}
if(eason_qwq[n]>T)return 0;
int b=chenhj123,cur=n;
while(cur!=1)b=min(b,Eason_cyx[eason_oier[cur]]),cur=Wei_ch[eason_oier[cur]].u;
int eyuc=T-eason_qwq[n]+1;
if(eyuc<=0)return 0;
if(b>=(chenhj123+eyuc-1)/eyuc)return 1;
chenhj123-=b*eyuc;
cur=n;
while(cur!=1)Eason_cyx[eason_oier[cur]]-=b,cur=Wei_ch[eason_oier[cur]].u;
}
return 1;
}
signed main(){
cin>>n>>m>>c;
for(int i=0;i<m;i++){
cin>>Wei_ch[i].u>>Wei_ch[i].v>>Wei_ch[i].l>>Wei_ch[i].t;
Happy_New_Year[Wei_ch[i].u].push_back(i);
}
Vct14[t++]=1;Alex_smy[1]=1;
while(h<t){
int u=Vct14[h++];
for(int i=0;i<(int)Happy_New_Year[u].size();i++){
int v=Wei_ch[Happy_New_Year[u][i]].v;
if(!Alex_smy[v])Alex_smy[v]=1,Vct14[t++]=v;
}
}
if(!Alex_smy[n]){cout<<"-1\n";return 0;}
int l=0,r=INF,ans=-1;
while(l<=r){
int mid=(l+r)/2;
if(mamingcam(mid))ans=mid,r=mid-1;
else l=mid+1;
}
cout<<ans;
}
RT
回复
共 83 条回复,欢迎继续交流。
正在加载回复...