A-化学
题意:
根据不同的烷烃基,通过5行a,b描述一个烷烃基。根据输入的烷烃基原子编号,甄别烷烃基的类别。组数T(1≤T≤200000),序号a,b(1≤a,b≤6,a ≤b)。数据保证输入的烷烃基是以上5种之一。
思路:
筛选不同的烷烃基,首先就需要理清不同的烷烃基之间的区别。简单分析后,发现不同烷烃基原子的度是不同的。因此可以采用图论的方法进行分析。
- n-hexane每个原子的度都小于等于2。
- 2-methylpentane和3-methylpentane都有且仅有一个3度节点。
而这两种烷烃基的3度节点所连接的节点的度是不同的。
2-methylpentane的三度节点连接了1个2度节点和2个1度节点。
3-methylpentane的三度节点连接了2个2度节点和1个1度节点。 - 仅有2,2-dimethylbutane有4度节点。
- 2,3-dimethylbutane有2个3度节点。
根据这种不同,可以很好的筛选出不同的烷烃基。采用数组描述图的方法,利用bfs计算图中每个原子的度,根据度的差异筛选烷烃基,顺利通过。
总结:
做这道题时,其实很容易想出根据原子的度不同对不同的烷烃基进行筛选,但是如何筛选2-methylpentane和3-methylpentane着实难到了我。刚开始我居然认为它们没有差别,仔细的思考才弄清了思路。得到了准确的思路后,写代码倒不是一件很难的事情。计算节点度数已是老生常谈的问题。
代码:
#include<iostream>
#include<cstdio>
int temp[6][6];
int main()
{
int t;scanf("%d",&t);
for(int k = 0;k < t;k++)
{
for(int i=0;i<6;i++)
for(int j=0;j<6;j++)
temp[i][j]=0;
for(int j = 0;j<5;j++)
{
int x,y;
scanf("%d%d",&x,