大佬求助,蒟蒻这题只有95pts
查看原帖
大佬求助,蒟蒻这题只有95pts
760445
Bad_Luck_No_Fun楼主2023/8/5 20:33
#include <bits/stdc++.h>
using namespace std;
# define Rep(i,a,b) for(int i=a;i<=b;i++)
# define _Rep(i,a,b) for(int i=a;i>=b;i--)
# define RepG(i,u) for(int i=head[u];~i;i=e[i].next)
# define maxn 1000005
# define int unsigned long long
typedef long long ll;
template<typename T> void read(T &x){
	x=0;int f=1;
	char c=getchar();
	for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+c-'0';
	x*=f;
}
struct node{
	int id, v;
}_dep[maxn];
bool operator < (node a, node b)
{
	return a.v < b.v;
}
int n;
int dep[maxn];
queue <int> q;
bool ans[maxn];
vector <int> e[maxn];
int sum, now, f;
void dfs(int u, int fa)
{
	dep[u] = dep[fa] + 1;
	for(int i = 0; i < e[u].size(); i++){
		if(e[u][i] == fa) continue;
		dfs(e[u][i], u);
	}
}
signed main()
{
	read(n);
	for(int i = 1; i <= n - 1; i++){
		int u, v;
		read(u), read(v);
		e[u].push_back(v), e[v].push_back(u);
	}
	dfs(1, 0);
	for(int i = 1; i <= n; i++)
		_dep[i].id = i, _dep[i].v = dep[i];
	sort(_dep + 1, _dep + n + 1);
	for(int i = 1; i <= n; i++) sum += dep[i];
	if(sum % 2){
		cout << -1 << endl;
		return 0;
	}	
	for(int i = 1; i <= n; i++){
		q.push(i); now += _dep[i].v;
		while(now > sum / 2) now -= _dep[q.front()].v, q.pop();
		if(now == sum / 2){
			while(!q.empty()) ans[_dep[q.front()].id] = 1, q.pop();
			f = 1;
			break;
		}
	}
	if(f){
		for(int i = 1; i <= n; i++) cout << ans[i] << " ";
		return 0;
	}
	cout << -1 << endl;
	return 0;
}

WA on #27。

2023/8/5 20:33
加载中...