mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-11-06 06:43:49 +00:00
fix(P3953): 修复DFS逻辑错误并添加调试输出
修复DFS函数中节点1的处理逻辑,调整nk的比较运算符,并添加printf调试输出 优化solve函数中dp数组的初始化范围
This commit is contained in:
parent
5cb2778d2c
commit
f67a1ebcb3
@ -7,7 +7,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
using ll = int64_t;
|
using ll = int64_t;
|
||||||
#define sl static inline
|
#define sl static inline
|
||||||
// #define printf
|
#define printf
|
||||||
const ll maxm=2e5+5,inf=1e9+7;
|
const ll maxm=2e5+5,inf=1e9+7;
|
||||||
ll n,m,k,p,nt,d[maxm],dp[maxm][57];
|
ll n,m,k,p,nt,d[maxm],dp[maxm][57];
|
||||||
bool isn,vis[maxm][57];
|
bool isn,vis[maxm][57];
|
||||||
@ -54,21 +54,28 @@ sl ll dfs(ll u,ll k){
|
|||||||
isn=true;
|
isn=true;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if(u==1)return k==0?1:0;
|
|
||||||
vis[u][k]=true;
|
|
||||||
if(dp[u][k]!=-1){
|
if(dp[u][k]!=-1){
|
||||||
|
printf("dp[%lld][%lld]=%lld, in temp\n",u,k,dp[u][k]);
|
||||||
return dp[u][k];
|
return dp[u][k];
|
||||||
}
|
}
|
||||||
|
vis[u][k]=true;
|
||||||
ll nans=0;
|
ll nans=0;
|
||||||
for(auto[v,w]:re[u]){
|
for(auto[v,w]:re[u]){
|
||||||
ll nk=d[u]+k-d[v]-w;
|
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;
|
nans=(nans+dfs(v, nk))%p;
|
||||||
if(isn){
|
if(isn){
|
||||||
|
vis[u][k]=false;
|
||||||
return 0;
|
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;
|
vis[u][k]=false;
|
||||||
|
printf("dp[%lld][%lld]=%lld\n",u,k,nans);
|
||||||
return dp[u][k]=nans;
|
return dp[u][k]=nans;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,12 +88,11 @@ sl void solve(){
|
|||||||
re.clear();
|
re.clear();
|
||||||
re.resize(n+1);
|
re.resize(n+1);
|
||||||
for(ll i=1;i<=n;i++){
|
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;
|
dp[i][j]=-1;
|
||||||
vis[i][j]=false;
|
vis[i][j]=false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dp[1][0]=1;
|
|
||||||
for(ll i=1;i<=m;i++){
|
for(ll i=1;i<=m;i++){
|
||||||
ll u,v,w;
|
ll u,v,w;
|
||||||
std::cin>>u>>v>>w;
|
std::cin>>u>>v>>w;
|
||||||
@ -99,9 +105,10 @@ sl void solve(){
|
|||||||
std::cout<<"0\n";
|
std::cout<<"0\n";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const ll ms=d+k;
|
// const ll ms=d+k;
|
||||||
ll ans=0;
|
ll ans=0;
|
||||||
for(ll i=0;i<=k;i++){
|
for(ll i=0;i<=k;i++){
|
||||||
|
printf("DFS i=%lld----\n",i);
|
||||||
ans=(ans+dfs(n,i))%p;
|
ans=(ans+dfs(n,i))%p;
|
||||||
if(isn){
|
if(isn){
|
||||||
std::cout<<"-1\n";
|
std::cout<<"-1\n";
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user