A-化学
化学很神奇,以下是烷烃基。
假设如上图,这个烷烃基有6个原子和5个化学键,6个原子分别标号1~6,然后用一对数字 a,b 表示原子a和原子b间有一个化学键。这样通过5行a,b可以描述一个烷烃基
你的任务是甄别烷烃基的类别。
原子没有编号方法,比如
1 2
2 3
3 4
4 5
5 6
和
1 3
2 3
2 4
4 5
5 6
是同一种,本质上就是一条链,编号其实是没有关系的,可以在纸上画画就懂了Input输入第一行为数据的组数T(1≤T≤200000)。每组数据有5行,每行是两个整数a, b(1≤a,b≤6,a ≤b)
数据保证,输入的烷烃基是以上5种之一Output每组数据,输出一行,代表烷烃基的英文名
Example
Input
2
1 2
2 3
3 4
4 5
5 6
1 4
2 3
3 4
4 5
5 6
Output
n-hexane
3-methylpentane
Example
解题思路:
这道题是一道关于图的题,需要注意点就是无向图点的出入度。2,3-dimethylbutane没有出入度为2的点,2,2-dimethylbutane有1个出入度为2的点,n-hexane有4个出入度为2的点。如果有2个出入度为2的点,并且与出入度为1的点相连的点的出入度为3的个数为2时,2-methylpentane。否则,3-methylpentane。
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
int a,b,n,num;
scanf("%d",&n);
for(int
i=0;i<n;i++)
{
int edg[6]={0},d[6]={0};
int
x=0,y=0; num=0;
for(int
i=0;i<5;i++)
{
scanf("%d
%d",&a,&b);
edg[a-1]++;
edg[b-1]++;
d[a-1]=b-1;
d[b-1]=a-1;
}
for(int
i=0;i<6;i++)
{
if(edg[i]==2)
num++;
}
if(num==0)
printf("2,3-dimethylbutane\n");
if(num==1)
printf("2,2-dimethylbutane\n");
if(num==4)
printf("n-hexane\n");
if(num==2)
{
for(int
i=0;i<6;i++)
if(edg[i]==1)
{
x=d[i];
if(edg[x]==3)
y++;
}
if(y==2)
printf("2-methylpentane\n");
else
printf("3-methylpentane\n");
}
}
return 0;
}