社区讨论
这个代码的复杂度为什么会TLE
CF1900C Anji's Binary Tree参与者 4已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @lqchkfnj
- 此快照首次捕获于
- 2023/12/19 23:14 2 年前
- 此快照最后确认于
- 2023/12/20 14:15 2 年前
遍历每个叶子结点,顺着路径遍历到根节点,最坏情况下即叶子结点最多为 ,层数为 ,那么时间复杂度为 ,但为什么提交会超时?
CPP#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
void sol(){
int n;
cin >> n;
string s;
cin >> s;
vector<PII> G;
vector<int> fG;
int h[n+10] = {0};
G.resize(n+10);
fG.resize(n+10);
vector<int> ye;
for(int i = 1;i<=n;i++){
int l,r;
scanf("%d %d",&l,&r);
G[i].first = l;
G[i].second = r;
fG[l] = i;
fG[r] = i;
if(!l && !r) ye.push_back(i);
}
// cout << "ye = " << ye.size() << endl;
int ans = 0x3f3f3f3f;
int res = 0;
for(auto u : ye){
int cnt = 0;
int v = u;
while(v != 1){
res++;
if(G[fG[v]].first == v){
//左儿子
if(s[fG[v]-1] != 'L') cnt++;
}else{
if(s[fG[v]-1] != 'R') cnt++;
}
v = fG[v];
if(v == 0) break;
}
ans = min(cnt,ans);
}
cout << res << endl;
cout << ans << endl;
}
int main()
{
int t;
cin >> t;
while (t--)
{
sol();
}
system("pause");
return 0;
}
回复
共 7 条回复,欢迎继续交流。
正在加载回复...