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";