Legal or Not(模板题)
本来以为这题能用并查集做的,但一想不对
例如A-> B,A->C如果用并查集的话B与C就不能连了,但实际B可以是C的徒弟,所以这题是考拓扑排序。
#include<stdio.h> #include<string.h> int d[105],map[105][105],vis[105]; int main() { int i,j,k,f,n,m,u,v; while(~scanf("%d%d",&n,&m)) { if(n==0) break; memset(d,0,sizeof(d)); memset(map,0,sizeof(map)); memset(vis,0,sizeof(vis)); for(i=1; i<=m; i++) { scanf("%d%d",&u,&v); if(!map[u][v])//这里很重要,因为可能有输入重复的点 { map[u][v]=1; d[v]++; } } for(i=0; i<n; i++) { f=0; for(j=0; j<n; j++) { if(d[j]==0&&vis[j]==0)//用于处理存在好几个入度为0的节点 { vis[j]=1; for(k=0; k<n; k++) if(map[j][k]) d[k]--; f=1; break;//找到一个入度为0的就结束 } } if(f==0)//如果节点未输出完,而图中就没有了入度为0的节点,则说明有环,不合法。 break; } if(f==0) printf("NO\n"); else printf("YES\n"); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构