我裂开了,C题不知道错哪里了,怎么可能超时呢?

#include <bits/stdc++.h>
#define ios ios::sync_with_stdio;cin.tie(0);cout.tie(0)
using namespace std;
const int N = 1e6+100;
struct node {
	int u, v;
};
int n, p;
int dfn[N], cnt[N];
vector<node> lst;
void dfs(int pos) {
	if(p > n) return ;
	int id = dfn[pos];
	for(int i = 0; i < cnt[id] - 1; i ++) {
		++ p;
		if(p > n) return ;
		int neId = dfn[p];
		int u = min(id, neId), v = max(id, neId);
		lst.push_back({u, v});
		dfs(p);
	}
	return ;
}
bool cmp(node &a, node &b) {
	if(a.u == b.u) return a.v < b.v;
	return a.u < b.u; 
}
int main()
{
	ios;
	cin >> n;
	for(int i = 1; i <= n; i ++) cin >> dfn[i];
	for(int i = 1; i <= n; i ++) cin >> cnt[i];
	p = 1;
	dfs(1);
	if(lst.size() > n - 1) return 0;
	sort(lst.begin(), lst.end(), cmp);
	for(int i = 0; i < lst.size(); i ++) {
		cout << lst[i].u << " " << lst[i].v << '\n';
	}
 	return 0;
}

全部评论
给你改了一下, 对于当前根,遍历其子节点时应该每次跳一个子树,你写成了每次跳一个节点 可以看我C的最后一个提交记录
点赞
送花
回复
分享
发布于 2023-03-03 11:00 江苏

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务