From f67a1ebcb3eff41c4c0b862b15cd206c407ef482 Mon Sep 17 00:00:00 2001 From: Zengtudor Date: Wed, 5 Nov 2025 18:37:07 +0800 Subject: [PATCH] =?UTF-8?q?fix(P3953):=20=E4=BF=AE=E5=A4=8DDFS=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E9=94=99=E8=AF=AF=E5=B9=B6=E6=B7=BB=E5=8A=A0=E8=B0=83?= =?UTF-8?q?=E8=AF=95=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复DFS函数中节点1的处理逻辑,调整nk的比较运算符,并添加printf调试输出 优化solve函数中dp数组的初始化范围 --- src/11/5/P3953.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/11/5/P3953.cpp b/src/11/5/P3953.cpp index 2f2d900..5bb1c5c 100644 --- a/src/11/5/P3953.cpp +++ b/src/11/5/P3953.cpp @@ -7,7 +7,7 @@ #include using ll = int64_t; #define sl static inline -// #define printf +#define printf const ll maxm=2e5+5,inf=1e9+7; ll n,m,k,p,nt,d[maxm],dp[maxm][57]; bool isn,vis[maxm][57]; @@ -54,21 +54,28 @@ sl ll dfs(ll u,ll k){ isn=true; return 0; } - if(u==1)return k==0?1:0; - vis[u][k]=true; if(dp[u][k]!=-1){ + printf("dp[%lld][%lld]=%lld, in temp\n",u,k,dp[u][k]); return dp[u][k]; } + vis[u][k]=true; ll nans=0; for(auto[v,w]:re[u]){ ll nk=d[u]+k-d[v]-w; - if(nk<0||nk>k)continue; + if(nk<0||nk>::k)continue; nans=(nans+dfs(v, nk))%p; if(isn){ + vis[u][k]=false; return 0; } } + if(u==1){ + const ll ret= k==0?1:0; + printf("dp[%lld][%lld]=%lld u==1\n",u,k,ret); + nans=ret; + } vis[u][k]=false; + printf("dp[%lld][%lld]=%lld\n",u,k,nans); return dp[u][k]=nans; } @@ -81,12 +88,11 @@ sl void solve(){ re.clear(); re.resize(n+1); for(ll i=1;i<=n;i++){ - for(ll j=1;j<=50;j++){ + for(ll j=0;j<=k;j++){ dp[i][j]=-1; vis[i][j]=false; } } - dp[1][0]=1; for(ll i=1;i<=m;i++){ ll u,v,w; std::cin>>u>>v>>w; @@ -99,9 +105,10 @@ sl void solve(){ std::cout<<"0\n"; return; } - const ll ms=d+k; + // const ll ms=d+k; ll ans=0; for(ll i=0;i<=k;i++){ + printf("DFS i=%lld----\n",i); ans=(ans+dfs(n,i))%p; if(isn){ std::cout<<"-1\n";