#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5;
int n,m,tot;
stack<int>s;
vector<int>v[N];
int dfn[N],low[N];
bool vis[N];
void init(){
for(int i=1;i<=n;i++){
v[i].clear();
}
memset(vis,false,sizeof(vis));
memset(dfn,0,sizeof(dfn));
memset(low,0,sizeof(low));
tot=0;
while(!s.empty()){
s.pop();
}
int p,q;
//开始读入
for(int i=1;i<=m;i++){
scanf("%d%d",&p,&q);
v[p].push_back(q);
}
}
void tarjan(int x){
dfn[x]=low[x]=++tot;
s.push(x);
vis[x]=true;
for(int i=0;i<v[x].size();i++){
int y=v[x][i];
if(!dfn[y]){
tarjan(y);
low[x]=min(low[x],low[y]);
}else if(vis[y]){
low[x]=min(low[x],dfn[y]);
}
}
if(low[x]==dfn[x]){
while(1){
int temp=s.top();
s.pop();
vis[temp]=false;
if(temp==x)break;
}
}
}
int main(){
while(scanf("%d%d",&n,&m)!=EOF&&n+m){
init();
tarjan(1);
bool flag=false;
for(int i=1;i<=n;i++){
if(low[i]!=1){
flag=true;
break;
}
}
if(flag)printf("No\n");
else printf("Yes\n");
}
return 0;
}
【1269】迷宫城堡
最新推荐文章于 2022-08-03 14:07:24 发布