题目链接:http://codeforces.com/contest/767/problem/C


问能否将一棵带点权的书分成点权$3$块,求任意方案。

其实考虑一棵以$x$为根的子树权值为${\frac{1}{3}\sum val[i]}$之后它就一定要作为单独的一块了,那么DFS一遍即可。


 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<vector>
 5 #include<cstdlib>
 6 #include<cmath>
 7 #include<cstring>
 8 using namespace std;
 9 #define maxn 1000010
10 #define llg long long
11 #define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
12 llg n,m,ans[maxn],tot,val[maxn],size[maxn],sum,dad[maxn],root;
13 vector<llg>a[maxn];
14
15 void dfs(llg x,llg fa)
16 {
17     if (tot==2) return ;
18     llg w=a[x].size(),v;
19     size[x]=val[x];
20     for (llg i=0;i<w;i++)
21     {
22         if (tot==2) return ;
23         v=a[x][i];
24         if (v==fa) continue;
25         if (tot==2) return ;
26         dfs(v,x);
27         if (tot==2) return ;
28         size[x]+=size[v];
29     }
30     if (size[x]==sum) {ans[++tot]=x; size[x]=0;}
31     if (tot==2) return ;
32 }
33
34 void init()
35 {
36     cin>>n;
37     for (llg i=1;i<=n;i++)
38     {
39         scanf("%I64d%I64d",&dad[i],&val[i]);
40         if (dad[i]==0) root=i;
41         a[dad[i]].push_back(i);
42         sum+=val[i];
43     }
44 }
45
46 int main()
47 {
48 //    yyj("C");
49     init();
50     if (sum%3!=0) {cout<<-1; return 0;}
51     sum/=3;
52     dfs(root,0);
53     sort(ans+1,ans+tot+1);
54     for (llg i=1;i<=n;i++)
55         if (ans[i]==root)
56         {
57             cout<<-1;
58             return 0;
59         }
60     if (tot>=2) {for (llg i=1;i<=tot;i++) cout<<ans[i]<<" "; }else cout<<-1;
61     return 0;
62 }

转载于:https://www.cnblogs.com/Dragon-Light/p/6414187.html

codeforces 767C - Garland相关推荐

  1. Codeforces 1287C Garland

    题目链接: Codeforces 1287C Garland 思路: 我们记dp[i][j][0]和dp[i][j][1]分别为第i个为奇数/偶数且前i个里面有j个偶数的情况下,第i个的最小复杂度: ...

  2. CodeForces - 1287C Garland(贪心)

    题目链接:点击查看 题目大意:原本有一个1~n的排列,现在缺少了一些数字,用0来代替,现在要求将缺少的数字重新填回去,要求代价和最少,规定代价为:若相邻两个数字的奇偶性不同,则代价为1,否则代价为0 ...

  3. codeforces#239_div2_B Garland 简单模拟

    题目地址:戳这里 题目大意:剪成花环,可以cut 但是不能粘贴--那么最多的方案就是,对每一种具体的颜色,第一字符串中出现的次数和第二个字符串中出现的次数取较小值. 先以为not obliged to ...

  4. 树形dp+树形结构总结

    总结 最近写了好多树形dp+树形结构的题目,这些题目变化多样能与多种算法结合,但还是有好多规律可以找的. 先说总的规律吧! 一般来说树形dp在设状态转移方程时都可以用f[i][]表示i这颗子树怎么怎么 ...

  5. Codeforces 题目合集+分类+代码 【Updating...】【361 in total】

    961A - Tetris                                                模拟                                      ...

  6. K-periodic Garland CodeForces - 1353E(贪心)

    You are given a garland consisting of n lamps. States of the lamps are represented by the string s o ...

  7. K-periodic Garland CodeForces - 1353E(暴力+贪心+dp)

    题意: 给定长为 n 的 0, 1 字符串,你可以通过一次操作改变一个字符(0 变 1 or 1 变 0),问最少几次操作可以使任意相邻两个 1 之间的距离为 k ? 题目: You are give ...

  8. CodeForces - 1353E K-periodic Garland(思维+dp)

    题目链接:点击查看 题目大意:给出 n 个灯泡以及其初始状态(开或关),每次操作可以将任意一个灯泡的状态置反,问最少需要操作多少次,可以使得所有开着的灯泡之间相距 k 个单位 题目分析:因为需要满足所 ...

  9. codeforces problem 140E New Year Garland

    排列组合题 题意 用m种颜色的彩球装点n层的圣诞树.圣诞树的第i层恰由l[i]个彩球串成一行,且同一层内的相邻彩球颜色不同,同时相邻两层所使用彩球的颜色集合不同.求有多少种装点方案,答案对p取模. 只 ...

最新文章

  1. linux偏向swap,solaris/linux 增加swap交换空间的方法
  2. mysql一些查询方法记录
  3. Twisted 介绍 及TCP广播系统实例
  4. nginx log_format 中的变量
  5. 用Python进行数据探索,探索竞赛优胜方案
  6. LeetCode 76. 最小覆盖子串(滑动窗口)
  7. Spring Boot关于thymeleaf公共页面抽取
  8. keras模型训练参数
  9. 汽车电子技术——ECU/MCU嵌入式软件开发
  10. iOS16 beta8 描述文件官方地址下载
  11. 最优化理论与算法(袁亚湘)学习笔记---最优性条件和最优化算法的基本结构
  12. 电子公文流转暨无纸办公系统
  13. Android 11 Beta 版本发布和相关活动推迟说明
  14. 《自然》:深度学习超分辨显微成像方法
  15. 【PyG】文档总结以及项目经验(持续更新
  16. 针式 PKM 个人知识管理软件 视频简介
  17. 努力是为了让自己不平庸
  18. mysql存储字典,详解MySQL-8.0数据字典
  19. pve开启嵌套虚拟化,pve下kvm类型CPU的群晖VMM虚拟机创建
  20. Python网络爬虫与信息提取(中国大学mooc)

热门文章

  1. JZOJ 1533. 郁闷的gxg
  2. java 对象读写_java 对象输入输出流读写文件的操作实例
  3. Qt 视图框架示例 Colliding Mice 的翻译
  4. md5碰撞Java_java现在MD5加密不安全了吗?
  5. [codevs 1916] 负载平衡问题
  6. hdu5491(2015合肥网络赛H题)
  7. uvalive5986(贪心)
  8. 试卷批分(c++打表版)
  9. vue中webpack默认配置_Vue-cli 中 Webpack 配置优化(一)
  10. server之后安装ssms失败 安装sql_关于SQL安装失败的解决方法