【名词解释】
第一行输入两个整数
代表顶点数量、边数量。
此后
行,第
行输入两个整数
和
,表示图上第
条边双向连接顶点
和
。
图可能存在重边。不存在自环、保证连通。
如果给定的图不是一张二分图,输出
;否则输出
。
5 6 1 2 2 3 3 4 4 1 4 5 5 2
YES
在这个样例中,把顶点
点染色为白,
点染色为黑,即可满足二分图要求,所以这个图是二分图。
5 4 1 2 2 3 3 1 4 5
NO
本题已于下方时间节点更新,请注意题解时效性:
1. 2025-07-07 优化题面文本与格式
2. 2025-11-28 第一组样例与实际边数不符,修正。模板题为便于测试,将时间限制扩充至 5s,空间限制扩充至 1024MB。
3. 2025-12-05 对题面与数据进行了微调,以匹配整套模板题(从
增加到
,输出修改为全大写的
和
,去除了题面背景,增加了重边数据)。
import sys
def test_binary(num):
dic1 = {}
dic2 = {}
for i in num:
if (i[0] in dic1 and i[1] in dic1) or (i[0] in dic2 and i[1] in dic2):
return False
else:
if i[0] in dic1:
dic2[i[1]] = dic2.get(i[1],0)+1
elif i[0] in dic2:
dic1[i[1]] = dic1.get(i[1],0)+1
elif i[1] in dic1:
dic2[i[0]] = dic2.get(i[0],0)+1
elif i[1] in dic2:
dic1[i[0]] = dic1.get(i[0],0)+1
else:
dic1[i[0]] = dic1.get(i[0],0)+1
dic2[i[1]] = dic2.get(i[1],0)+1
return True
if __name__=='__main__':
n,m = list(map(int,input().split()))
res = []
for line in sys.stdin.readlines():
temp = list(map(int,line.split()))
res.append(temp)
if test_binary(res):
print('Yes')
else:
print('No')