用dfs判断1至n个顶点的连接图是否是连通的,
/**/
#include<stdio.h>
#include<string.h>
int mmap[1010][1010],vis[1010],n;
void dfs(int x)
{
int i;
vis[x]=1;
for(i=0;i<=n;i++)
{
if(!vis[i]&&mmap[x][i])
{
vis[i]=1;
dfs(i);
}
}
}
int main()
{
int i,m,a,b;
while(~scanf("%d %d",&n,&m))
{
memset(mmap,0,sizeof(mmap));
memset(vis,0,sizeof(vis));
for(i=0;i<m;i++)
{
scanf("%d %d",&a,&b);
mmap[a][b]=1;
}
dfs(1);
if(vis[n]!=1)//保证最后一个点也被访问过
printf("NO\n");
else
printf("YES\n");
}
return 0;
}