当前位置: 首页 > ai >正文

《算法笔记》10.6小节——图算法专题->拓扑排序 问题 C: Legal or Not

题目描述

ACM-DIY is a large QQ group where many excellent acmers get together. It is so harmonious that just like a big family. Every day,many "holy cows" like HH, hh, AC, ZT, lcc, BF, Qinz and so on chat on-line to exchange their ideas. When someone has questions, many warm-hearted cows like Lost will come to help. Then the one being helped will call Lost "master", and Lost will have a nice "prentice". By and by, there are many pairs of "master and prentice". But then problem occurs: there are too many masters and too many prentices, how can we know whether it is legal or not?We all know a master can have many prentices and a prentice may have a lot of masters too, it's legal. Nevertheless,some cows are not so honest, they hold illegal relationship. Take HH and 3xian for instant, HH is 3xian's master and, at the same time, 3xian is HH's master,which is quite illegal! To avoid this,please help us to judge whether their relationship is legal or not. Please note that the "master and prentice" relation is transitive. It means that if A is B's master ans B is C's master, then A is C's master.

输入

The input consists of several test cases. For each case, the first line contains two integers, N (members to be tested) and M (relationships to be tested)(2 <= N, M <= 100). Then M lines follow, each contains a pair of (x, y) which means x is y's master and y is x's prentice. The input is terminated by N = 0.TO MAKE IT SIMPLE, we give every one a number (0, 1, 2,..., N-1). We use their numbers instead of their names.

输出

For each test case, print in one line the judgement of the messy relationship.If it is legal, output "YES", otherwise "NO".

样例输入
4 3
0 1
1 2
2 3
3 3
0 1
1 2
2 0
0 1
样例输出
YES
NO

分析:给出 n 个点,m 条边的图,问这个图是否是有向无环图。进行拓扑排序即可。

#include<algorithm>
#include <iostream>
#include  <cstdlib>
#include  <cstring>
#include   <string>
#include   <vector>
#include   <cstdio>
#include    <queue>
#include    <stack>
#include    <ctime>
#include    <cmath>
#include      <map>
#include      <set>
#define INF 0x3fffffff
#define db1(x) cout<<#x<<"="<<(x)<<endl
#define db2(x,y) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<endl
#define db3(x,y,z) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<endl
#define db4(x,y,z,r) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<", "<<#r<<"="<<(r)<<endl
#define db5(x,y,z,r,w) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<", "<<#r<<"="<<(r)<<", "<<#w<<"="<<(w)<<endl
using namespace std;bool TopologicalSort(int in[],int n,vector<int>dag[])
{
//    bool vis[n+5]={0};int cnt=0;queue<int>que;for(int i=0;i<n;++i){if(in[i]==0)que.push(i);}while(!que.empty()){int temp=que.front();que.pop();cnt++;int len=dag[temp].size();for(int i=0;i<len;++i){int index=dag[temp][i];in[index]--;if(in[index]==0)que.push(index);}}if(cnt==n)return true;return false;
}int main(void)
{#ifdef testfreopen("in.txt","r",stdin);
//    freopen("out.txt","w",stdout);clock_t start=clock();#endif //testint n,m;while(scanf("%d%d",&n,&m),n){int in[n+5]={0};vector<int>dag[n+5];for(int i=0;i<m;++i){int a,b;scanf("%d%d",&a,&b);dag[a].push_back(b);in[b]++;}bool ans=TopologicalSort(in,n,dag);if(ans==1)printf("YES\n");else printf("NO\n");}#ifdef testclockid_t end=clock();double endtime=(double)(end-start)/CLOCKS_PER_SEC;printf("\n\n\n\n\n");cout<<"Total time:"<<endtime<<"s"<<endl;        //s为单位cout<<"Total time:"<<endtime*1000<<"ms"<<endl;    //ms为单位#endif //testreturn 0;
}

http://www.xdnf.cn/news/3102.html

相关文章:

  • Spring 转发 form-data 文件上传请求时中文文件名乱码
  • 【大模型面试每日一题】Day 4:低资源语言建模方案
  • vue3 打字机效果
  • 【CUDA pytorch】
  • DAPO:对GRPO的几点改进
  • 模式识别的基本概念与理论体系
  • 智能机器人在物流行业的应用:效率提升与未来展望
  • pycharm导入同目录下文件未标红但报错ModuleNotFoundError
  • iVX 开源战略:多维突破下的产业生态革新与未来图景
  • MCP的基础知识
  • C++从入门到实战(十一)详细讲解C/C++语言中内存分布与C与C++内存管理对比
  • 一种动态分配内存错误的解决办法
  • Chrome插件备忘
  • Godot笔记:入门索引
  • 卷积神经网络
  • 解析2.4G射频芯片采用DFN封装的技术原因
  • 32单片机——串口
  • 精选10个好用的WordPress免费主题
  • Day106 | 灵神 | 二叉树 二叉树中的最长交错路径
  • OpenAI 2025 4月最新动态综述
  • DINOv2 - 无监督学习鲁棒视觉特征
  • Webpack 和 Vite 中静态资源动态加载的实现原理与方法详解
  • kotlin中Triple的作用
  • C#基础简述
  • Elasticsearch入门速通01:核心概念与选型指南
  • Unity URPShader:实现和PS一样的色相/饱和度调整参数效果(修复)
  • Springboot使用ThreadLocal提供线程局部变量,传递登录用户名
  • 计算机考研精炼 操作系统
  • Smart Link+Monitor Link组网
  • 【solidity基础】一文说清楚合约函数的大小事