链接:https://ac.nowcoder.com/acm/problem/14134
来源:牛客网
题目描述
𝑅𝑒𝑘𝑖是一名武侦高狙击科的学生,武侦高也设有基础学科,现在她正
在完成生物课的作业。
给出一张𝑛个点𝑚条边的无向图,这张无向图描述了一个细胞,细胞有
三种:X型、Y型还是I型。
如图,虚线方向的链可以无限延伸,现在需要判断给定的图是哪一种
细胞,或者都不是。
输入描述:
第一行,两个正整数𝑛,𝑚。
接下来𝑚行,每行两个正整数𝑢, 𝑣描述一条无向边。
输出描述:
输出这种细胞的类型,若都不是输出NotValid。
示例1
输入
复制
7 6
1 2
1 3
1 4
1 5
5 6
6 7
输出
复制
X
示例2
输入
复制
7 6
1 2
1 3
3 4
1 5
5 6
6 7
输出
复制
Y
示例3
输入
复制
2 1
1 2
输出
复制
I
示例4
输入
复制
8 7
1 2
1 3
1 4
4 5
5 6
5 7
5 8
输出
复制
NotValid
备注:
对于100%的数据,2 ≤ 𝑛 ≤ 500,0 ≤ 𝑚 ≤ 𝑛*(𝑛−1)/2,没有重边和自环。
#include<bits/stdc++.h>
using namespace std;
vector<int>v[511];
int main()
{
int n,m,fl=0,i,a,b,si=0,y=0;
cin>>n>>m;
for(i=0;i<m;i++)
{
cin>>a>>b;
v[a].push_back(b);
v[b].push_back(a);
}
for(i=1;i<=n;i++)
{
if(v[i].size()==4)
{
si++;
if(si+y>1)
{
fl=1;
break;
}
}
else if(v[i].size()==3)
{
y++;
if(y+si>1)
{
fl=1;
break;
}
}
else if(v[i].size()<=2);//一个点连着两个没关系,但是连着超过四个的就好像有问题了
else {
fl=1;
break;
}
}
if(fl==1)
{
printf("NotValid");
}
else {
if (si == 1) {
printf("X");
} else if (y == 1) {
printf("Y");
}
else
printf("I");
}
}
京公网安备 11010502036488号