連結の判定 (paizaランク A 相当) 

今回の問題は、連結の問題です。模範解答では連結しているかどうかの判定に、リンクをたどることが出来た番号にフラグを立てるという方法が用いられています。

筆者はその方法を思いつかなくて、無向グラフの隣接行列を作って、リンク先がどこにもない(=隣接行列が全て0である要素)ことが見つかれば、その時点でループを止めて「連結でない」と判定しました。すべての隣接行列に1が含まれていれば、必ず何処かとつながっています。

# coding: utf-8
# 自分の得意な言語で
# Let's チャレンジ!!
n,m = [int(x)for x in input().split()]
g=[[0]*n for _ in range(n)]
for _ in range(m):
    a,b=[int(x)for x in input().split()]
    g[a-1][b-1]=1
    g[b-1][a-1]=1
flag=False
for e in g:
    if 1 not in e:
        flag=True
        break
if flag:
    print("NO")
else:
    print("YES")