#include<bits/stdc++.h>
using namespace std;
const int N=1100;
int n,m,a,b;
bool flag;
bool vis[N];
vector<int> g[N];
void init()//初始化
{
flag=false;
for(int i=1;i<=n;i++)
{
vis[i]=false;
g[i].clear();
}
}
void build()//邻接表建表
{
for(int i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
g[a].push_back(b);
}
}
void dfs(int u)//dfs
{
if(u==1)
{
flag=true;//如果遍历到1结点则更新flag
return ;
}
vis[u]=true;
for(auto tt:g[u])
{
if(!vis[tt])
{
dfs(tt);
}
}
}
int main()
{
while(scanf("%d %d",&n,&m)!=EOF)
{
init();
build();
dfs(n);
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
在做本题的时候遇到了一些问题,build的返回类型没有用void,误写了int导致超内存,虽然也没搞明白为什么返回值会占用内存,但是以后还是注意一下类似的问题吧。