【名词解释】
第一行输入两个整数
——节点数与边数。
接下来的
行,每行输入两个整数
,表示存在一条连接
与
的无向边。保证无重边、自环。
若该图为二分图,输出Yes;否则输出No。
5 7 1 2 2 3 3 4 4 1 4 5 5 2
Yes
如图,把1, 3, 5点染色为白,2, 4染色为黑,即可满足二分图要求,所以这个图是二分图。
5 4 1 2 2 3 3 1 4 5
No
1, 2, 3号点无论如何染色都无法满足要求,所以不是二分图。
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')