U432833 烷烃命名

题目描述

**注意:本题对烷烃等名词的定义可能与高中课本上的定义略有不同,如有歧义,以本题面为准。** ### 我们作出如下定义: - 烷烃:可以看成一颗无根树,其中叶子节点均为氢原子(用 $\texttt{H}$ 表示),非叶子节点均为碳原子(用 $\texttt{C}$ 表示),边为化学键,要求每一个碳原子都必须连着四个其他的原子。 - 碳链:无根树上的简单路径,要求路径中不包含氢原子。碳链分为**主链**和**支链**。主链是烷烃中选取的最长的碳链。从主链上延申出去的碳链称为支链。 - 烷基:在烷烃上任意去掉一个氢原子就会形成烷基。烷基可以作为**取代基**来替换另外一个烷烃上的某个氢原子。替换的操作为:先将烷烃上的某个碳所连接的一个氢原子删去,再将这个碳原子与烷基中仅连接三个原子的碳相连。可以证明烷烃经过若干次替换后仍是烷烃。 常见的烷基及其中文和英文(词根)如图: ![甲基methyl、乙基ethyl、正丙基propyl、异丙基isopropyl](https://cdn.luogu.com.cn/upload/image_hosting/ia69vdnu.png) 替换过程如图所示: ![](https://cdn.luogu.com.cn/upload/image_hosting/obinujhn.png) 对于上图,我们可以说乙基作为取代基替换了原烷烃中的一个氢原子。 ------- ### 烷烃的系统命名法如下: **1. 选主链**。 选择烷烃中**最长**的碳链作为主链。如果有多条最长的碳链,选择**取代基数目最多**的那一条。 **2. 编号**。 从主链上距离取代基更近的一端开始,对主链上的碳原子用阿拉伯数字编号。此时我们可以用取代基所连接的碳原子编号作为该取代基的编号。一种取代基可能会有多个编号,一个编号可能对应多个取代基。 如果主链的两个端点分别与对应最近的取代基距离相等,则选择**最后能使得取代基编号之和更小**的那一端开始编号。 **3. 书写**。 按取代基碳数从小到大的顺序书写。若取代基中的碳数相同,先写支链少的,后写支链多的。若没有取代基则不用写。 对于一种取代基,先从小到大写出取代基的所有编号,编号之间用逗号隔开,接着添加一个短横线,在后面写上取代基的名称。如果有多个相同的取代基,在取代基名称前要加上表示“二”、“三”等数字的前缀。最后在末尾添加主链名称。 ------- ### 烷烃英文单词的书写规范如下: - 主链的词根是 $\texttt{ne}$ 。 - 如果想要表示碳数**大于** $4$ 的主链,或者**四个**以上相同的取代基,可以在英文单词前加上表示数字的前缀,如下表: | 数字 | 对应前缀 | 数字 | 对应前缀 | | :--: | :---------: | :--: | :-------: | | $1$ | $\texttt{hen-}$ | $100$ | $\texttt{hecta-}$ | | $2$ | $\texttt{do-}$ | $200$ | $\texttt{dicta-}$ | | $3$ | $\texttt{tri-}$ | $300$ | $\texttt{tricta-}$ | | $4$ | $\texttt{tetra-}$ | $400$ | $\texttt{tetracta-}$ | | $5$ | $\texttt{penta-}$ | $500$ | $\texttt{pentacta-}$ | | $6$ | $\texttt{hexa-}$ | $600$ | $\texttt{hexacta-}$ | | $7$ | $\texttt{hepta-}$ | $700$ | $\texttt{heptacta-}$ | | $8$ | $\texttt{octa-}$ | $800$ | $\texttt{octacta-}$ | | $9$ | $\texttt{nona-}$ | $900$ | $\texttt{nonacta-}$ | | $10$ | $\texttt{deca-}$ | $1000$ | $\texttt{kili-}$ | | $20$ | $\texttt{icosa-}$ | $2000$ | $\texttt{dili-}$ | | $30$ | $\texttt{triaconta-}$ | $3000$ | $\texttt{trili-}$ | | $40$ | $\texttt{tetraconta-}$ | $4000$ | $\texttt{tetrali-}$ | | $50$ | $\texttt{pentaconta-}$ | $5000$ | $\texttt{pentali-}$ | | $60$ | $\texttt{hexaconta-}$ | $6000$ | $\texttt{hexali-}$ | | $70$ | $\texttt{heptaconta-}$ | $7000$ | $\texttt{heptali-}$ | | $80$ | $\texttt{octaconta-}$ | $8000$ | $\texttt{octali-}$ | | $90$ | $\texttt{nonaconta-}$ | $9000$ | $\texttt{nonali-}$ | 此处需要注意两点: 1. 当最后一个词缀表示“几千”,且词根为 $\texttt{ne}$ 时,两者之间要用**字母** $\texttt{a}$ 隔开。 2. 如果某词缀的最后一个字母为 $\texttt{o}$ ,与其相邻的下一个词缀的第一个字母也为 $\texttt{o}$ ,则书写单词时只需**保留一个** 。对于其他的相同字母相邻的情况,**这两个字母都需要被保留**( 如 $\texttt{kiliisopropyl}$ )。 例:若想要表示含有 $1234$ 个碳原子的主链,应将 $1234$ 拆分成 $4+30+200+1000$ , 然后找到对应词缀,并按顺序拼接在一起,最后写上主链对应的词根,得到 $ \texttt{\color{red}{tetra}\color{green}{triaconta}\color{blue}{dicta}\color{orange}{kili}\color{black}{a}\color{violet}{ne}}$ 。 - 当需要表示碳数不超过 $4$ 的主链时,对应的前缀如下表: | 碳原子数 | 对应前缀 | | :------: | :------: | | $1$ | $\texttt{metha-}$ | | $2$ | $\texttt{etha-}$ | | $3$ | $\texttt{propa-}$ | | $4$ | $\texttt{buta-}$ | - 当需要表示含有两个或三个相同的取代基时,对应的前缀见下表: | 取代基个数 | 对应前缀 | | :--------: | :------: | | $2$ | $\texttt{di-}$ | | $3$ | $\texttt{tri-}$ | 同样地,如果存在两个相同字母相邻的情况,**两个都需要被保留**( 如 $\texttt{diisopropyl}$ )。 ------------ 小明最近对有机化学很感兴趣,他将给你一个烷烃中各个碳原子的连接方式,请你帮他给这个烷烃命名。

输入格式

第一行一个正整数 $n$, 表示烷烃中碳原子的数量。 第二行至第 $n$ 行,每行两个数字 $u$ 和 $v$, 表示烷烃中第 $u$ 个碳原子和第 $v$ 个碳原子之间有化学键连接。

输出格式

一行一个字符串,表示该烷烃的名称。

说明/提示

【样例 $1$ 解释】 不难发现该烷烃不含取代基,因此只需要书写主链,查表得主链长度为 $3$ 的烷烃的英文为 $\texttt{propane}$。 【样例 $2$ 解释】 该烷烃的结构如图所示(用红色圈出的碳链为主链,用蓝色圈出的为取代基,氢原子未画出): ![](https://cdn.luogu.com.cn/upload/image_hosting/lavbjx2g.png) 点 $6$ 距离取代基更近,因此从点 $6$ 开始编号,结果如下: ![](https://cdn.luogu.com.cn/upload/image_hosting/m1f230bt.png) 则该烷烃有两个甲基,编号分别为 $2$ 和 $2$,还有一个乙基,编号为 $4$,于是可以写出其系统命名。 【数据范围及保证】 对于 $20\%$ 的数据,$1 \le n \le 15$。 对于 $20\%$ 的数据,给出的烷烃没有取代基。 对于 $50\%$ 的数据, $1 \le n \le 10000$。 对于 $100\%$ 的数据, $1 \le u,v \le n \le 70000$。 保证小明给出的烷烃中只可能出现甲基、乙基、丙基和异丙基四种取代基,每种取代基的个数均小于 $10000$ ,且主链长度小于 $10000$。 idea:Eric159357