题目大意:给定一棵N个顶点的树,顶点为1~N,对于一个序列A1,A2,…,An,若Ai | Aj == 2^60-1,则会连一条边(i,j)。要求求出一个序列,可以唯一确定所给定的树。

思路:考虑到树是一个二分图,可以考虑将二分图左侧顶点对应的值的二进制位后两位设置为01,而右部分对应设置为10,这样可以使得二分图同侧不会出现连边。接下来不妨把左侧顶点的其余二进制位都设为1,之后对于左侧的每个顶点,各从前面若干个1中选择一个不同的设为0,之后对于树中每个从左侧连接到右侧顶点的边,只要把右侧顶点二进制位中对应左侧顶点二进制位中0的那一位设置成1,就可以构造出答案了。

因为二分图中必然有一侧顶点数小于等于N/2,而选择顶点较少的一侧作为左侧,最多仅用到52位所以这个构造可行。

代码:

#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
//#define int LL
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#pragma warning(disable :4996)
const int maxn = 110;
const double eps = 1e-6;
const LL MOD = 998244353; vector<int>G[maxn];
int V;
vector<int>B[2];
LL ans[maxn];
LL key[maxn];
bool used[maxn]; void add_edge(int from, int to)
{
G[from].push_back(to);
G[to].push_back(from);
} void dfs(int v, int pcol)
{
used[v] = true;
B[pcol ^ 1].push_back(v);
for (int i = 0; i < G[v].size(); i++)
{
int u = G[v][i];
if (!used[u])
dfs(u, pcol ^ 1);
}
} void solve()
{
LL mx = 1LL;
for (int i = 1; i <= 60; i++)
mx <<= 1;
mx -= 1;
dfs(1, 1);
LL base = 4LL;
if (B[1].size() < B[0].size())
swap(B[1], B[0]);
for (auto v : B[0])
{
ans[v] = mx;
ans[v] ^= base;
key[v] = base;
ans[v] -= 2LL;
base <<= 1;
}
for (auto v : B[1])
ans[v] |= 2LL;
for (auto v : B[0])
{
for (int i = 0; i < G[v].size(); i++)
{
int u = G[v][i];
ans[u] |= key[v];
}
}
for (int i = 1; i <= V; i++)
cout << ans[i] << ' ';
cout << endl;
} int main()
{
IOS;
int u, v;
cin >> V;
for (int i = 1; i < V; i++)
{
cin >> u >> v;
add_edge(u, v);
}
solve(); return 0;
}

2020ICPC济南站 J.Tree Constructer的更多相关文章

  1. @atcoder - CODE FESTIVAL 2017 Final - J@ Tree MST

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定 N 个点,第 i 点有一个点权 Xi,再给定一棵边带权的树 ...

  2. HDU3333 Turing Tree(线段树)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=3333 Description After inventing Turing Tree, 3x ...

  3. POJ3321 Apple Tree(DFS序)

    题目,是对一颗树,单点修改.子树查询.典型的dfs序入门题. DFS序可以将一颗树与子树们表示为一个连续的区间,然后用线段树来维护:感觉算是树链剖分的一种吧,和轻重链剖分不同的是这是对子树进行剖分的. ...

  4. Color a Tree[HDU1055]

    Color a Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  5. Codeforces 840D Expected diameter of a tree 分块思想

    Expected diameter of a tree 我们先两次dfs计算出每个点能到达最远点的距离. 暴力计算两棵树x, y连边直径的期望很好求, 我们假设SZ(x) < SZ(y) 我们枚 ...

  6. 平衡树 替罪羊树(Scapegoat Tree)

    替罪羊树(Scapegoat Tree) 入门模板题 洛谷oj P3369 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入xx数 删除xx数(若有多个相同 ...

  7. Problem: Query on the tree(二分+划分树)

    题目链接: Problem: Query on the tree Time limit: 1s     Mem limit: 64 MB      Problem Description There ...

  8. Huffman Tree -- Huffman编码

    #include <stdlib.h> #include <stdio.h> #include <string.h> typedef struct HuffmanT ...

  9. 牛客网 暑期ACM多校训练营(第二场)J.farm-STL(vector)+二维树状数组区间更新、单点查询 or 大暴力?

    开心.jpg J.farm 先解释一下题意,题意就是一个n*m的矩形区域,每个点代表一个植物,然后不同的植物对应不同的适合的肥料k,如果植物被撒上不适合的肥料就会死掉.然后题目将每个点适合的肥料种类( ...

随机推荐

  1. 集合框架-LinkedList集合(有序不唯一)

    1 package cn.itcast.p2.linkedlist.demo; 2 3 import java.util.Iterator; 4 import java.util.LinkedList ...

  2. Chrome DevTools 面板全攻略

    李华西,微医云服务团队前端开发工程师,喜欢瞎折腾,典型猫奴 Console 面板 此章节请打开 devtools/console/console.html 一起食用 一方面用来记录页面在执行过程中的信 ...

  3. Ubuntu 14.04更换内核

    1:查看当前安装的内核 dpkg -l|grep linux-image 2:查看可以更新的内核版本: sudo apt-cache search linux-image 3:安装新内核 sudo a ...

  4. MySQL OOM

    问题 前几天遇到一个奇怪的问题,服务器内存明明够用,结果在对 MySQL 进行测压的时候却出现了 OOM,是 Linux 内核出错了吗? 具体现象如下:使用 sysbench 对 mysql 进行压测 ...

  5. linux可用内存判断

    free是完全没有占用的空闲内存,Available 减 free是操作系统为了优化运行速度拿来调用的内存, 程序需要的话操作系统会进行释放.所以一般看Available即可. free+buffer ...

  6. python20day

    昨日回顾 正则表达式 元字符 量词 贪婪非贪婪 转义符 re模块 findall 会优先显示分组内容 取消优先显示(?: ) search 只能返回第一个符合条件的项 得到的结果需要.group()取 ...

  7. Codeforces Round #742 (Div. 2)

    A. Domino Disaster 思路 按照题意模拟即可 如果是 对应关系为R --> R L --> L U --> D D --> U AC_CODE inline v ...

  8. debian下编译安装redis并加入到systemd启动管理

    原文地址: http://blog.duhbb.com/2022/02/09/compile-and-install-redis-debian-and-add-to-systemd/ 欢迎访问我的个人 ...

  9. LCT 入门

    这是一份 \(\rm LCT\) 入门总结. 关于 \(\rm LCT\) 的复杂度这里不会提及,只会记录 \(\rm LCT\) 的基本操作和经典例题,但神奇的 \(\rm LCT\) 虽然常数巨大 ...

  10. 对axios的理解

    axios是基于promise的,可以使用promise api axios的请求方式 axios(config) axios.request(config) axios.get(url [,conf ...