【概述】

有向无环图(Directed Acyclic Graph),即 DAG 图,是指任意一条边有方向且不存在环路的图。

判断 DAG 图的方法有:拓扑排序 O(E)、Bellman-Ford 算法 O(VE)、使用邻接表的 DFS O(V+E) 等

【拓扑排序】

拓扑排序过程如果能生成 n 个顶点序列,那么说明图中不存在环,即图是一个 DAG 图

关于拓扑排序:点击这里

struct Node{int x;int num;Node(){}Node(int x,int num):x(x),num(num){}
};
vector<Node> edge[N];
int vis[N];
int n,m;
bool dfs(int x,int m){if(vis[x]==1)//出环return true;if(vis[x]==-1)//已访问return false;vis[x]=1;//正在被占用for(int i=0;i<edge[x].size();i++)if(edge[x][i].num<=m&&dfs(edge[x][i].x,m))return true;vis[x]=-1;//解除占用并标记访问return false;
}
bool judge(){memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++)if(!vis[i]&&dfs(i,m))return true;return false;
}
int main(){cin>>n>>m;for(int i=1;i<=m;i++){int x,y;cin>>x>>y;edge[x].push_back(Node(y,i));}if(judge())cout<<"Yes"<<endl;elsecout<<"No"<<endl;return 0;
}

【Bellman-Ford 算法】

由于 Bellman-Ford 算法除求最短路外只能判断是否存在负环,因此可以先把权值设为 -1,再进行判断

关于 Bellman-Ford 算法:点击这里

struct Node{int x,y;int w;
}G[N*2];
int dis[N];bool ford(int n, int m){for(int i=1;i<n;i++){for(int j=0;j<m;j++){int x=G[j].x;int y=G[j].y;int w=G[j].w;if(dis[y]>dis[x]+w)dis[y]=dis[x]+w;}}for(int i=0;i<m;i++)if(dis[G[i].x]>dis[G[i].y]+G[i].w)return true;return false;
}
int main(){int n,m;scanf("%d%d",&n,&m);memset(dis,INF,sizeof(dis));for(int i=0;i<m;i++){scanf("%d%d",&G[i].x,&G[i].y);G[i].w=-1;//把权值全部改为-1if(G[i].x==0)dis[G[i].y]=-1;}if(ford(n,m))printf("NO\n");elseprintf("YES\n");return 0;
}

【使用邻接表的 DFS】

枚举起点进行 DFS,如果当某个点与起点相同,则说明存在环,即非 DAG 图

struct Edge{int next;int to;
}edge[N*2];
int cnt,head[N],son[N];
bool vis[N];
void add(int from,int to){edge[++cnt].next=head[from];edge[cnt].to=to;head[from]=cnt;
}
bool flag;
void dfs(int x){if(vis[x])flag=false;if(!flag)return;vis[x]=true;for(int i=head[x];i!=-1;i=edge[i].next)dfs(edge[i].to);vis[x]=false;
}int main(){int n,m;scanf("%d%d",&n,&m);memset(head,-1,sizeof(head));for(int i=0;i<m;i++){int x,y;scanf("%d%d",&x,&y);add(x,y);}for(int i=1;i<=n;i++){flag=true;dfs(i);if(!flag)break;}if(flag)printf("Yes\n");elseprintf("No\n");return 0;
}

图论 —— 环与块 —— DAG 图判定相关推荐

  1. 图论 —— 环与块 —— 连通块的计数

    [概述] 对于给出 n 个点 m 条边的图来说,对任意两点,从顶点 Vi 到顶点 Vj 有路径,则称 Vi 和 Vj 是连通的,两者可视为一个连通块,因此,连通块的计数本质就是求其连通分量,可采用 d ...

  2. 图论 —— 环与块 —— 负权环

    [概述] 从一个点出发,经过一条简单路径回到起点,称为图的环,而图的负权环就是环中所有的边的权值均为负值. 所谓负权环问题,就是判断图中是否存在一个环,里面包含的边的边权总和<0 [Bellma ...

  3. 图论 —— 环与块 —— 最小环

    [概述] 从一个点出发,经过一条简单路径回到起点,称为图的环,而图的最小环就是所有环中长度最小的. 所谓最小环问题,最小环就是指在一张图中找出一个环,使得这个环上的各条边的权值之和最小. [求最小环] ...

  4. 图论 —— DAG 图的最长路

    [概述] DAG 图的最长路问题是一个比较少见的问题,具体问题是:给出一个 DAG 图,寻找图中的最长路 在 AOE 网中,在找出关键路径后,对其进行 DFS 即可得到图的最长路,由于这种方法的实现过 ...

  5. 【BZOJ - 3036】绿豆蛙的归宿(概率DAG图dp,拓扑排序,概率dp,期望的线性性)

    题干: 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度.绿豆蛙从起点出发,走向终点. 到达每一个顶点时,如 ...

  6. 7-3 DAG图优化-A (15 分)(更新版)

    7-3 DAG图优化-A (15 分) 大家都学过了代码优化,其中有一个DAG优化,这次我们就练习这个操作. 输入格式: 输入第一行为一个整数n(n < 100),表示该组输入的表达式的个数. ...

  7. spark ui job和stage的dag图查看过去运行的任务,查不到,分析源码解决问题

    项目场景: 使用用2.x跑任务,产看耗时的spark job, stage,发现job和stage的dag信息缺失 问题描述: sparkUI 显示dag信息缺失问题: 使用用2.x跑任务,查看spa ...

  8. 图论(9)图的连通度

    目录 一.割边.割点和块 割边及其性质 割点及其性质 块 二.连通度 顶点割定义 点连通度定义 k连通定义 边割定义 边连通度 连通度性质 减去一个点/边性质 点连通度与边连通度关系 边数点数确定的图 ...

  9. DAG 图关键路径算法

    关键路径 如果DAG图拓扑有序,那么此图可以转换成线性的先后关系,而不需要回退去访问数据.如果项目安排的事件拓扑有序,那么此项目中的各个事件的依存关系不可以解耦,不会形成连环套而致使项目无法开展.项目 ...

最新文章

  1. [C++对象模型][6]sizeof与对象内存布局
  2. 当PrintForm遇到RPC服务不可用的错误”
  3. 在公司如何远程控制家中电脑
  4. java线程安全总结
  5. 话里话外:企业管理软件的方案设计要规避哪些风险
  6. android 各个版本代表图标,使用不同的Android SDK版本的不同图标
  7. 基于Asp.net MVC的系统架构
  8. 像素越多越好?像元的面积越小越好?
  9. iOS 实现快速切换主题详细教程(附上源码)
  10. springboot校园二手交易平台的设计与实现毕业设计源码260839
  11. python数字转拼音输出_python 小程序:转换阿拉伯数字到拼音
  12. USGS下载LANDSAT5 2级别 影像问题
  13. 制作带边框的圆形头像
  14. BUUCTF misc 专题(22)隐藏的钥匙
  15. 设计师必备的导航网站
  16. Android Gradle进阶配置指南 1
  17. c语言巡线程序,小车巡线程序
  18. 天下无贼台词经典(收藏)
  19. 操作系统第五章——进程同步
  20. cocos2dx系列--颜色混合BlendFunc

热门文章

  1. 键值数据库LevelDB的优缺点及性能分析
  2. Python爬取B站5000条视频,揭秘为何千万人看「哪吒」流泪
  3. android 键盘点击事件监听事件,Android 键盘事件触发以及监听
  4. python编程多行输入_python多行输入的方法有哪些
  5. 面试基操:MQ怎么保障消息可靠性?
  6. 从崩溃的选课系统,论为什么更安全的 HTTPS 协议没有被全面采用
  7. 如果你的Spring水平就这?求求就不要去面试官那里送人头了
  8. 新来的大神用策略模式把if else给优化了,技术总监说:能不能想好了再改?...
  9. 图胜千言:电商支付架构设计
  10. 2022国内低代码平台厂商排行榜—经典收藏