- C++
- include
using namespace std;
const int N=100000;//总边数
vectoredge[N+1];
int n,m,q[N+1],d[N+1],x,y;//d 记录入度
inline void TopoSort(){
int front=1,rear=0;
for(int i=1;i<=n;i++){
if(!d[i])//入度为0
q[++rear]=i;
}
while (front<=rear){//队列非空
int x=q[front];
++front;//出队
for(auto y:edge[x])
if(—d[y]==0)q[++rear]=y;//入队
}
if(rear==n)printf(“No\n”);//这里的q即为其中一个合法序列
else printf(“Yes\n”);//有环
}
int main(){
scanf(“%d%d”,&n,&m);
for (int i=1;i<=m;i++){
scanf(“%d%d”,&x,&y);
edge[x].push_back(y);
}
TopoSort();
return 0;
} - Python
C++
include
using namespace std;
const int N=100000;//总边数
vector edge[N+1];
int n,m,q[N+1],d[N+1],x,y;//d 记录入度
inline void TopoSort(){
int front=1,rear=0;
for(int i=1;i<=n;i++){
if(!d[i])//入度为0
q[++rear]=i;
}
while (front<=rear){//队列非空
int x=q[front];
++front;//出队
for(auto y:edge[x])
if(—d[y]==0)q[++rear]=y;//入队
}
if(rear==n)printf(“No\n”);//这里的q即为其中一个合法序列
else printf(“Yes\n”);//有环
}
int main(){
scanf(“%d%d”,&n,&m);
for (int i=1;i<=m;i++){
scanf(“%d%d”,&x,&y);
edge[x].push_back(y);
}
TopoSort();
return 0;
}
using namespace std;
const int N=100000;//总边数
vector
int n,m,q[N+1],d[N+1],x,y;//d 记录入度
inline void TopoSort(){
int front=1,rear=0;
for(int i=1;i<=n;i++){
if(!d[i])//入度为0
q[++rear]=i;
}
while (front<=rear){//队列非空
int x=q[front];
++front;//出队
for(auto y:edge[x])
if(—d[y]==0)q[++rear]=y;//入队
}
if(rear==n)printf(“No\n”);//这里的q即为其中一个合法序列
else printf(“Yes\n”);//有环
}
int main(){
scanf(“%d%d”,&n,&m);
for (int i=1;i<=m;i++){
scanf(“%d%d”,&x,&y);
edge[x].push_back(y);
}
TopoSort();
return 0;
}
Python
若是要求字典序最值,那么改用优先队列(原先是队列)

