TLE 求助
查看原帖
TLE 求助
571132
Soft_cute楼主2023/8/6 09:46
#include<bits/stdc++.h>
# define int long long
using namespace std;
const int N=1e6+10;
int u,v,n,cut=0,l=0,r=0;
int b[N],cap[N];
struct Node {
	vector<int> childs;
	vector<int> child;
	int deep;
	int c;
	int k;
} g[N];
inline bool cmp(Node x,Node y) {
	return x.deep>y.deep;
}
inline void dfs(int rt,int fa) {
	g[rt].deep=g[fa].deep+1;
	for(int i=0; i<g[rt].childs.size(); i++) {
		if(g[rt].childs[i]==fa) continue;
		g[rt].c++;
		g[rt].child.push_back(g[rt].childs[i]);
		dfs(g[rt].childs[i],rt);
	}
}
inline void add(int x,int y) {
	g[x].childs.push_back(y);
}
signed main() {
	scanf("%d",&n);
	for(int i=1; i<n; i++) {
		scanf("%d%d",&u,&v);
		g[u].k=u,g[v].k=v;
		add(u,v);
		add(v,u);
	}
	dfs(1,0);
	for(int i=1; i<=n; i++) b[i]=g[i].deep,cut+=b[i];
	if(cut%2==1) {
		printf("-1");
		return 0;
	}
	cut/=2;
	sort(g+1,g+n+1,cmp);
	for(int i=1; i<=n; i++) {
		if(l<=r) l+=g[i].deep,cap[g[i].k]=1;
		else r+=g[i].deep,cap[g[i].k]=0;
	}
	if(l==cut&&r==cut) {
		for(int i=1; i<=n; i++) printf("%d ",cap[i]);
		return 0;
	}
	printf("-1");
	return 0;
}

一遍 dfs,一遍排序 为什么TLE

2023/8/6 09:46
加载中...