题目:

题意:

如果点x和y有连边,当且仅当a[x] or a[y] = 260 - 1 (两者是充分必要)
现在给你边的关系,问你每个点的值应该是多少?(给出一种情况即可)

题解:

构造题,思路非常巧妙
260就是(1<<60),减去1也就是从第一位到第59位都是1(第六十位是0省略了)
首先01染色,将点分为黑点和白点,让白色的点为个数少一些的
选数量较少的一组是确保数量小于等于 50
现在每个点都要节点编号id和颜色
id为该点的编号
对于白色的点,我们让其最高位为0,让其第id位也是0,其余位置都是1
对于黑色,我们让其最高位是1,与它相邻的所有点(也就是白点)的第id位置为1,其余为0

我们来分析分析为什么这样构造是对的
因为所有白色的最高位是0,所以确保了所有白色之间没有边。
白色的点第id为也是0,而与它相邻的黑点第id位是1,两者首位也是0和1,正好or后就是260 - 1,这就是确保了黑色与所哟相邻的白色节点满足条件
因为黑点除了首位,只要相邻的白点的第id位是1,所有当一个白点与该黑点不相连时,黑点给不了白点所需要位置上的1

综上所述就是:黑点所多的(也就是1的部分)是相邻白点所缺的位置
这个构图不禁让人感叹,妙啊~~

代码:

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
const int maxn=400;
ll ans[maxn],id[maxn];
vector<int>g[maxn],color[2];
void dfs(int x,int fa,int col)
{color[col].push_back(x);for(auto v:g[x]){if(v==fa)continue;dfs(v,x,col^1);}
}
int main()
{//cout<<((12312312-2)|1);int n;cin>>n;for(int i=1;i<n;i++){int u,v;cin>>u>>v;g[u].push_back(v);g[v].push_back(u);}dfs(1,0,1);//染色过程if(color[0].size()>color[1].size())swap(color[0],color[1]);//然后白色为少的 for(int i=0;i<color[0].size();i++)//对于白色 {int v=color[0][i];ans[v]=(1ll<<60)-1-(1ll<<59)-(1ll<<i);id[v]=i;}for(int i=0;i<color[1].size();i++){int u=color[1][i];ll tmp=(1ll<<59);//首位是1for(auto v:g[u]){tmp+=(1ll<<id[v]);//与第v位相连,该点编号是id[v] } ans[u]=tmp;id[u]=i;}for(int i=1;i<=n;i++)if(i==1) printf("%lld",ans[i]);else printf(" %lld",ans[i]);
}

Tree Constructer相关推荐

  1. 二分图 ---- 树的二分图性质 2020icpc 济南 J Tree Constructer(构造)

    题目链接 题目大意: 就是给你一颗树,你要对树上点进行赋值,使得相邻两个有边的点的权值或是260−12^{60}-1260−1,任意两个没边的两个点的或不能为260−12^{60}-1260−1 n∈ ...

  2. 2020济南ICPC J.Tree Constructer(二分图,构造)

    思路: 能想到二分图就感觉挺简单的了. 将树染色成二分图,然后取数目较小的那一部分(保证数目不大于50). 对于第一种颜色:将第 i i i个节点染色成 ( 1 < < 60 ) − 1 ...

  3. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)(重现赛)

    第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)(重现赛) 导语 涉及的知识点 题目 C D G J M 参考文献 导语 日常的队内集训,开始的时候状态其实很好,但是到了后两题就出现了 ...

  4. 107. Binary Tree Level Order Traversal II

    题目 Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from l ...

  5. 102. Binary Tree Level Order Traversal

    题目 Binary Tree Level Order Traversal 层次遍历二叉树 链接 Given a binary tree, return the level order traversa ...

  6. Python---哈夫曼树---Huffman Tree

    今天要讲的是天才哈夫曼的哈夫曼编码,这是树形数据结构的一个典型应用. !!!敲黑板!!!哈夫曼树的构建以及编码方式将是我们的学习重点. 老方式,代码+解释,手把手教你Python完成哈夫曼编码的全过程 ...

  7. [Java]LeetCode297. 二叉树的序列化与反序列化 | Serialize and Deserialize Binary Tree

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  8. Code Forces Bear and Forgotten Tree 3 639B

    B. Bear and Forgotten Tree 3 time limit per test2 seconds memory limit per test256 megabytes inputst ...

  9. Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)

    Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...

最新文章

  1. 快速开发rails、==常用插件==
  2. python wxpython backend wxagg_[宜配屋]听图阁
  3. ubuntu12.04安装lamp的简单lamp
  4. 联通定时休眠5G基站 戳破皇帝的新衣
  5. 企业级数据库备份方案完全攻略
  6. 机器学习速成课程 | 练习 | Google Development——编程练习:创建和操控张量
  7. 如何设置mysql远程访问
  8. ubuntu10.10升级到11.4出错之问题解决
  9. 一小时写给同组的如何使用工具检测代码质量
  10. 测量在Python中经过的时间
  11. SqlServer批量更新两关联表的数据
  12. 安卓webview嵌套网页不更新更换域名
  13. 国家计算机考试报名照片编辑器,电脑的证件照制作软件推荐
  14. 锦绣金秋,共荟未来——荟语酒店投资人沙龙活动
  15. tbody css 高度,html – CSS:无法为%滚动设置tbody height
  16. 2022年国内最牛的Java面试八股文合集(MCA版),不接受反驳
  17. 计算机信息安全四大要素,信息安全四大要素-信息安全包括四大要素
  18. 一种简单的图形旋转算法
  19. sql语句两个练习 emp dept 复杂查询
  20. java 8 Collectors.toMap 重复key 值处理、value为null处理

热门文章

  1. 3秒取暖,超高颜值!冬日必备的大宇取暖器
  2. 北大教授郑也夫斗胆谈了7个天大的问题(非常狠,也很现实)
  3. 小甲鱼零基础入门python二十一课课后题_小甲鱼Python第二十一讲课后习题
  4. lol修改服务器域名,LOL历史转区用户解冻大区官网自助系统地址 新版申请解冻账号网址...
  5. 如何给柱状图柱子添加阴影_【LeetCode日记】84. 柱状图中最大的矩形
  6. 什么?面试官问我Java内存模型!这不得给我加薪?
  7. xp怎样安装android-studio,Xposed 框架的安装
  8. 自定义依赖注解无效_最详细的自定义Spring Boot Starter开发教程
  9. 软件构造学习笔记-第二周
  10. vector容器中查找某一元素是否存在(牛逼的vector!!!!!!)