Even Tree

Link:

  https://www.hackerrank.com/challenges/even-tree

 1 def search(a,b): # 根据核心算法和题目要求要筛选边

 2     seen = {}

 3     seen[a] = True

 4     q = []

 5 

 6     for x in adj[a]:

 7         if x != b:

 8             seen[x] = True

 9             q.append(x)

10     s = len(q) + 1

11     while q:

12         n = q.pop()

13         for x in adj[n]:

14             if x not in seen:

15                 seen[x] = True

16                 q.append(x)

17                 s += 1

18     return (s+1)%2

19 

20 [N,M] = [int(x) for x in raw_input().split(' ')]

21 edges = [] # 保存边的list

22 adj = {} # 保存邻接的dict

23 for a in xrange(1,N+1): # 初始化

24     adj[a] = []

25 

26 for a in xrange(M):

27     [x,y] = [int(z) for z in raw_input().split(' ')]

28     adj[x].append(y) # 保存边的对应,没有方向性

29     adj[y].append(x)

30     edges.append((x,y)) # 保存边边

31 

32 count = 0

33 for e in edges:

34     (x,y) = e

35     if search(x,y): #依次查看每个边是否能移开

36         count += 1

37         adj[x].remove(y)

38         adj[y].remove(x)

39 

40 print count

学习

  图的基本结构

    edge, adj建立dict/list保存

  然后根据算法进行计算

 

  本质

    换了一个数据的结构

你可能感兴趣的:(tree)