传送门

题意:给一棵nnn个结点的树,构造一个nnn阶排列ppp,使得所有距离为333的点对(i,j)(i,j)(i,j)满足pi+pjp_i+p_jpi​+pj​和pipjp_ip_jpi​pj​至少一个为333的倍数。

分析一下,这个条件等价于所有距离333的点对点权对三取模后不都为111且不都为222

换句话说,所有余数为111的点中不存在距离为333的,222一样。

因为要求距离为333,可以二分图染色,把余数相同的放在同一个颜色中。

问题转换成了:把⌊n+23⌋\lfloor\frac{n+2}3\rfloor⌊3n+2​⌋个111和⌊n+13⌋\lfloor\frac{n+1}3\rfloor⌊3n+1​⌋个222放入两个集合,要求相同的数只能放在同一个集合。且这两个集合最多分别只能放x,yx,yx,y个,其中x+y=nx+y=nx+y=n

如果x,yx,yx,y中一个很大,就把两个都放进去,否则分开放。

根据意识流一定可以放下,瞎搞一波即可。

最后剩下的放333

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#define MAXN 200005
#define MAXM 400005
using namespace std;
struct edge{int u,v;}e[MAXM];
int head[MAXN],nxt[MAXM],cnt;
void addnode(int u,int v)
{e[++cnt]=(edge){u,v};nxt[cnt]=head[u];head[u]=cnt;
}
int col[MAXN],tot[2],p[MAXN],n;
void dfs(int u)
{++tot[col[u]];for (int i=head[u];i;i=nxt[i])if (col[e[i].v]==-1)col[e[i].v]=col[u]^1,dfs(e[i].v);
}
inline void putp(int r,int c)//freedomly put r+3k into color c
{int cur=r;for (int i=1;i<=n;i++)if (col[i]==c&&!p[i]){p[i]=cur,cur+=3;if (cur>n) return;}
}
int main()
{scanf("%d",&n);for (int i=1;i<n;i++){int u,v;scanf("%d%d",&u,&v);addnode(u,v),addnode(v,u);}memset(col,-1,sizeof(col));for (int i=1;i<=n;i++) if (col[i]==-1) col[i]=0,dfs(i);int k=(n+1)/3;if (k<=min(tot[0],tot[1])) putp(2,tot[1]<=tot[0]);else putp(2,tot[1]>tot[0]);putp(1,tot[1]>tot[0]);int cur=3;for (int i=1;i<=n;i++)if (!p[i])p[i]=cur,cur+=3;for (int i=1;i<=n;i++) printf("%d%c",p[i]," \n"[i==n]);return 0;
}

【Hitachi2020C】ThREE【构造】【二分图染色】相关推荐

  1. Codeforces Round #742 (Div. 2) F. One-Four Overload 构造 + 二分图染色

    传送门 文章目录 题意: 思路: 题意: 给你一个n∗mn*mn∗m的矩形,包含...和XXX,你有两种颜色,你需要给...染色使得每个XXX上下左右相邻的...其两种颜色个数相同,输出一种合法方案. ...

  2. AT2675 [AGC018F] Two Trees (构造+二分图染色+并查集)

    description 戳我看题目 solution 正解说是欧拉回路,但是于私而言非常难懂,如果有兴趣可以看香香mm的博客 定义一个点如果有偶数个儿子,就为奇点:如果有奇数个儿子,就为偶点 对于一个 ...

  3. AtCoder Regular Contest 063 E - Integers on a Tree 构造 + 二分图染色

    传送门 题意: 给你一颗nnn个点的树,初始的时候某些点有权值pip_ipi​,现在你需要给没给定的点赋一个权值,使得任意相邻点权值之差的绝对值等于111,若无解输出NoNoNo. 1≤n≤1e5,1 ...

  4. codeforces 1635E-Cars (二分图染色+拓扑排序)

    传送门 difficult:2200difficult:2200difficult:2200 题意 数轴上存在 nnn 辆车和 mmm 个限制,每个限制以 opopop.uuu.vvv 的形式表示,其 ...

  5. P1155 双栈排序(二分图染色)

    P1155 双栈排序(二分图染色) 题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一 ...

  6. LOJ P1155 双栈排序 二分图染色 图论

    https://www.luogu.org/problem/show?pid=P1155 题解: https://www.byvoid.com/zhs/blog/noip2008-twostack 开 ...

  7. Relation(NOIP模拟赛)(二分图染色)

    原题: Description 有n个人,编号为1àn,告诉你那些人之间是不友好的.现在,让你将这n个人分成两组,使得每一组之内的人是互相友好的,如果可以分成两组,则输出如何分组的,如果不可以分成两组 ...

  8. 【POJ 2942】Knights of the Round Table(点双连通分量,二分图染色)

    圆桌会议必须满足:奇数个人参与,相邻的不能是敌人(敌人关系是无向边). 求无论如何都不能参加会议的骑士个数.只需求哪些骑士是可以参加的. 我们求原图的补图:只要不是敌人的两个人就连边. 在补图的一个奇 ...

  9. uva 11080(二分图染色)

    题意:一个国王要派若干士兵看守王国.王国是一张无向图,然后士兵只能站在点上.每个士兵的看守范围是临近的点与边,士兵看管的的边不能重复.问最少用多少个士兵能使每个点和边都有人看守. 思路:这道题可以抽象 ...

最新文章

  1. 零基础是学java还是python-零基础学编程java和python哪个好
  2. 高校计算机实验管理人员会议,计算机科学学院召开实验室安全与管理工作会议...
  3. 用Python画一只蝙蝠
  4. 要重复多少次变成潜意识_说了多少次了!通过学校区域一定要......
  5. 超越kmeans:聚类算法概述
  6. 实例63:python
  7. ROS与Arduino学习(六)Logging日志
  8. Python 的 requests 库的用法
  9. 企业即时通讯将成为未来企业竞争致胜的关键
  10. SQL SERVER 2014 安装图解(含 SQL SERVER 2014 安装程序共享)
  11. 接不住了,能撒手吗?
  12. c++之static的一些用法
  13. 计算机屏幕画图工具,电脑屏幕画笔工具(Pointofix)
  14. Win10用注册表开启任务栏透明
  15. 更新到PS CC 2019 缩放的时候 按住shift变成不规则缩放了 反而不按住shift是等比例缩放...
  16. 闲聊可穿戴设备 - shawn.xie
  17. pandas学习之电影评分(利用python进行统计分析)的学习笔记
  18. python程序 爱意_情人节到了,隔离在家的你还不快用Python给你的她表达下爱意?...
  19. java EE crm代码_基于jsp的小型企业CRM-JavaEE实现小型企业CRM - java项目源码
  20. 世界顶级黑客Kevin D.Mitnick教你如何在数字世界中真正隐形

热门文章

  1. 恐龙的丁丁长什么样?它们是怎么啪啪啪的?这项研究网友看完直呼涨姿势.........
  2. 理工男都能有多痴情?
  3. 你和女朋友的婚后老年生活!
  4. 为什么男性比女性死得更早,心疼一秒钟!
  5. 世界头号毒枭古斯曼被捕,全因被内部IT男出卖!
  6. 监督学习:KNN(K-近邻)算法实现手写数字识别的三种方法
  7. 备战美赛,这些你应该知道的知识点
  8. Spark运行原理剖析
  9. 计算机和hdmi无法正常显示,HDMI都不灵 为什么电脑连电视效果差?
  10. 腐蚀rust服务器命令_RUST++ MOD