社区讨论

为什么这个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 条回复,欢迎继续交流。

正在加载回复...