链接: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"); } }