首页 > 其他分享 >CF 767C Garland

CF 767C Garland

时间:2022-10-25 17:02:47浏览次数:98  
标签:fr Garland int cnt CF 权值 767C include size


题目链接:​​传送门​​​ 题面:
个节点的树
个节点权值为


问是否能够删除掉两条边,使得该树分成三个不为空,并且每部分权值之和相等.
无解输出否则输出要删除边()的节点序号

STL吼啊
详细解释在代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <complex>
#include <algorithm>
#include <climits>
#include <queue>
#include <map>
#include <vector>
#include <iomanip>
#define
#define
#define

using namespace std;
int n, a, b, root, cnt, sum, rem;
int pre[A], size[A], w[A], ans[3], cans;
vector<int> v[A]; //vector存图
void dfs(int fr) {
size[fr] = w[fr]; //子树权值一开始是这个点的权值
for (int i = 0; i < v[fr].size(); i++) //遍历相邻的每个点
if (v[fr][i] != pre[fr]) { //不是同一个结点
dfs(v[fr][i]); //继续往下搜
size[fr] += size[v[fr][i]]; //算上子树大小
}
if (size[fr] == (sum / 3) and pre[fr])
ans[++cans] = fr, size[fr] = 0; //算进答案中了就去掉这颗子树
}

int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
cnt++;
scanf("%d%d", &a, &b);
if (!a) {
root = cnt; //记录下根节点
w[cnt] = b; //点的权值
pre[cnt] = a; //记录下前驱
sum += b; //这颗树的点权和
}
else {
w[cnt] = b;
pre[cnt] = a;
v[cnt].push_back(a); //双向存图
v[a].push_back(cnt);
sum += b;
}
}
if (sum % 3) return puts("-1") & 0; //怎么也分不成三份
dfs(root);
if (cans >= 2) printf("%d %d\n", ans[1], ans[2]);
else puts("-1");
}


标签:fr,Garland,int,cnt,CF,权值,767C,include,size
From: https://blog.51cto.com/lyle/5794955

相关文章

  • IPW65R110CFDA英飞凌车规MOS管\原装现货ASEMI代理
    编辑:llIPW65R110CFDA英飞凌车规MOS管\原装现货ASEMI代理型号:IPW65R110CFDA品牌:ASEMI封装:TO-247最大漏源电流:99.6A漏源击穿电压:650VRDS(ON)Max:0.099Ω引脚数量:3特性:车规级MOS管......
  • IPW65R110CFDA英飞凌车规MOS管\原装现货ASEMI代理
    编辑:llIPW65R110CFDA英飞凌车规MOS管\原装现货ASEMI代理型号:IPW65R110CFDA品牌:ASEMI封装:TO-247最大漏源电流:99.6A漏源击穿电压:650VRDS(ON)Max:0.099Ω引脚数量:3特性:......
  • IPW65R080CFDA英飞凌车规MOS管\原装现货\ASEMI代理
    编辑:llIPW65R080CFDA英飞凌车规MOS管\原装现货\ASEMI代理型号:IPW65R080CFDA品牌:ASEMI封装:TO-247最大漏源电流:137A漏源击穿电压:650VRDS(ON)Max:0.072Ω引脚数量:3沟道......
  • CF1743B Permutation Value
    题链:cfluogu构造。Description构造一个\(1\simn\)的排列,使之连续子串构成\(1\simk\)排列的数目最少。Analysis显然,最小数目可以为\(2\)。因为可以构造所示......
  • CF1156E Special Segments of Permutation
    题目链接:​​传送门​​直接枚举最大值往左右扩就过了,,*/#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<complex>#include<algorit......
  • CF1092F Tree with Maximum Cost
    题目链接:​​传送门​​是​​这个题​​​的一个变形就是最小值改成最大值懒了直接改了改当时的代码当时的题解里也有解析#include<iostream>#include<cstdio>#inclu......
  • CF685B Kay and Snowflake
    题目链接:​​传送门​​给出q组询问每次求以这个点为根的子树的重心,n,q<=300000树的重心的一个性质:每棵的子树的大小都不超过整个树大小的一半具体细节看代码实现*/#incl......
  • CF1062E Company
    题目链接:​​传送门​​翻译那边有要知道树上一个区间的公共lca是区间dfs序的最小值和最大值对应的两个点的lca证明可以去网上找删掉dfs最大或最小的点然后再通过一次d......
  • CF1000E We Need More Bosses
    题目链接:​​传送门​​一个无向图中求找到两个点使这两个点之间必须经过的边最多,求最多要经过的边缩完点树的直径E还能这么良心*/#include<iostream>#include<cstdio>......
  • CF438D The Child and Sequence
    题目链接:​​传送门​​区间求和,单点修改,区间取模线段树里维护一个max,取模的时候如果区间最大值小于max直接return就可以不然的话递归到叶子节点再取模有效降低复杂度不......