MLE了,求救

P1037 [NOIP2002 普及组] 产生数

@[luohongbo](/user/610410) dfs函数递归没有出口,爆栈
by Asedwai_7 @ 2023-07-09 11:42:07


@[Asedwai_7](/user/728910) 他如果条件不符合循环完后不就会自动return吗?
by fenboQAQ @ 2023-07-09 11:51:06


@[luohongbo](/user/610410) (No sure 如果一直访问到 changdu[jilu[a][i]],或者说 > if(changdu[jilu[a][i]]) dfs(jilu[a][i]); 如果这里dfs中的jilu[a][i]=a,
by Asedwai_7 @ 2023-07-09 11:59:03


@[Asedwai_7](/user/728910) 改了一下,没有MLE了,但是WA了 ``` #include <bits/stdc++.h> using namespace std; int r[105][105],lens[105]; bool vis[10005]; long long num = 0; int ans[105]; void dfs(int a){ if(vis[a]) return; for(int i = 1;i <= lens[a];i ++){ num ++; if(lens[r[a][i]]){ vis[a] = 1; dfs(r[a][i]); vis[a] = 0; } } } void cheng(int yy){ int fw = 0; for(int i = 30;i >= 1;i --){ ans[i] = ans[i] * yy + fw; fw = ans[i] / 10; ans[i] %= 10; } } int main(){ ans[30] = 1; string s; int k; cin >> s >> k; for(int i = 1;i <= k;i ++){ int a,b; cin >> a >> b; r[a][++ lens[a]] = b; } for(int i = 0;i < s.size();i ++){ num = 1; int c = s[i] - '0'; dfs(c); cheng(num); } int len = 1; while(ans[len] == 0){ len ++; } for(int i = len;i <= 30;i ++){ cout << ans[i]; } return 0; } ```
by fenboQAQ @ 2023-07-09 12:03:50


|