思路:
能想到二分图就感觉挺简单的了。
将树染色成二分图,然后取数目较小的那一部分(保证数目不大于50)。
对于第一种颜色:将第 i i i个节点染色成 ( 1 < < 60 ) − 1 − ( 1 < < 59 ) − ( 1 < < i ) (1<<60)-1-(1<<59)-(1<<i) (1<<60)−1−(1<<59)−(1<<i),这样保证同色或运算结果不会是 ( 1 < < 60 ) − 1 (1<<60)-1 (1<<60)−1。
对于第二种颜色:第 i i i个节点,赋值为 ( 1 < < 59 ) + ( 1 < < v 1 , 2 , 3... ) (1<<59)+(1<<v_{1,2,3...}) (1<<59)+(1<<v1,2,3...​), v 1 , 2 , 3... v_{1,2,3...} v1,2,3...​代表 i i i个节点所连的边编号。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <unordered_map>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 7;
long long x;
int id[maxn];
vector<int>G[maxn];
vector<int>V[2];
ll ans[maxn];
void dfs(int x,int fa,int cur) {V[cur].push_back(x);for(int i = 0;i < G[x].size();i++) {int v = G[x][i];if(v == fa) continue;dfs(v,x,cur ^ 1);}
}
int main() {int n;scanf("%d",&n);for(int i = 1;i < n;i++) {int x,y;scanf("%d%d",&x,&y);G[x].push_back(y);G[y].push_back(x);}dfs(1,-1,1);if(V[0].size() > V[1].size()) {swap(V[0],V[1]);}for(int i = 0;i < V[0].size();i++) {int v = V[0][i];id[v] = i;ans[v] = (1ll << 60) - 1;ans[v] ^= (1ll << 59);ans[v] ^= (1ll << i);}for(int i = 0;i < V[1].size();i++) {int v = V[1][i];ans[v] = (1ll << 59);for(int j = 0;j < G[v].size();j++) {int w = id[G[v][j]];ans[v] |= (1ll << w);}}for(int i = 1;i <= n;i++) {printf("%lld ",ans[i]);}return 0;
}

2020济南ICPC J.Tree Constructer(二分图,构造)相关推荐

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

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

  2. 2020 ACM / ICPC 济南 A Matrix Equation (高斯消元、乘法原理)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 给你定义两种 010101 矩阵上的运算: Xi,j×Yi,j=(∑k=1NXi,kYk,j ...

  3. 图论(二分图构造) ---- 二分图的性质 C. Arpa’s overnight party and Mehrdad’s silent entering

    题目大意: 有 nnn 对情侣坐在 2n2n2n 个板凳上,板凳排成环形.每张凳子恰好坐一个人. 现在有两种食物分给他们.规定: 1.每对情侣中,俩人不能分到同一种食物: 2.环上任意三个相邻的人,不 ...

  4. CodeForces 658C Bear and Forgotten Tree 3(构造)

    题意:构造一棵树,有N个点,直径为d,深度为h 思路:首先构造一个长度为d的链,然后把其中一个距离边上为h的点变为根.然后我们就不停的在距离根为h上面的那一点不停的加点就好了,使得新加入的点的距离也为 ...

  5. CF - 741(C. Arpa’s overnight party and Mehrdad’s silent entering) 二分图构造

    题目链接 题意 已经给出情侣的座位编号,将两种饭分配给N对情侣.满足以下两个要求: 情侣之间不能吃相同的饭 座位号连续的三个人不能吃同一种饭 问是否存在满足的解. 思路 构造二分图 对应情侣的座位建边 ...

  6. 【CodeForces - 260D】Black and White Tree (思维构造,猜结论,细节,构造一棵树)

    题干: The board has got a painted tree graph, consisting of n nodes. Let us remind you that a non-dire ...

  7. 2018青岛ICPC ZOJ 4063: Tournament(构造)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4063 题意: 给你n和k,都小于1000,构造一个k*n的数组满 ...

  8. 2020年ICPC辽宁省赛- 最长回文串(Java)

    最长回文串 题目描述 算法分析 代码展示 题目描述 链接:ICPC辽宁省赛复现赛 题目描述: 回文串是反转后与自身完全相同的字符串 比如:"ABA","ACMMCA&qu ...

  9. 2017 ccpc网络赛 1001 Vertex Cover(二分图 构造)HDU6150

    题意:"最小点覆盖集"是个NP完全问题 有一个近似算法是说-每次选取度数最大的点(如果有多个这样的点,则选择最后一个) 让你构造一个图,使得其近似算法求出来点数是你给定的覆盖点数的 ...

最新文章

  1. Leetcode 刷题笔记
  2. SQL Server 2008存储过程的加密
  3. 要用Identity Server 4 -- OAuth 2.0 超级简介
  4. nginx反向代理和shiro权限校验产生的404问题
  5. 价值800的swapidc鸟云模板
  6. bxslider 纵向滑动 vertical image thumbnail slider
  7. win下常用快捷鍵及其作用
  8. 高校舆情分析python_微博的高校舆情监控系统设计
  9. Java 分页计算公式
  10. 现代计算机的存储体系 (转载)
  11. 手机如何双声道录音_如何在手机端实现电话录音功能?
  12. 计算机二级Python错题
  13. Kafka单节点安装部署
  14. Libero逻辑分析仪的使用(基本篇)
  15. 股票量化自动交易软件下单原则条件
  16. 微型直流减速电机简述:无刷电机与有刷电机区别分析
  17. html 感叹号代码,HTML电子邮件中的感叹号
  18. 2021年,让你看透世界的8个底层逻辑
  19. 在华为HG255D路由器上刷了OpenWRT,实现了多拨,下载速度超快
  20. 华为计算机魔术,科技魔术秀 如何让手机秒变电脑

热门文章

  1. 调用wx.relaunch报错:fail can not invoke relaunch in background
  2. php文件添加音乐播放器,window_win10系统自带Groove音乐播放器在哪?自带Groove音乐播放器添加音乐等功能的使用教程,   播放器在哪?1 - phpStudy...
  3. 购物车retrofit+ok+rxjava
  4. Tank:如果我变成回忆
  5. 计算机怎么检测扫描机,再见扫描仪!微信这个功能太赞了,100份合同快速录入电脑...
  6. 苹果手机/小米8拍照上传图片旋转的问题
  7. jenkins中配置maven项目
  8. QT入门-UI-信号槽
  9. Windows安装RabbitMQ教程
  10. 将String类型转换成Map数据类型