整理的算法模板合集: ACM模板


目录

  • 判断一个图是否为树
    • 1. 无向图(hdu 1272 小希的迷宫)
    • 2. 有向图(hdu 1325 Is It A Tree?)

判断一个图是否为树

1. 无向图(hdu 1272 小希的迷宫)

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<bitset>
#include<queue>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const int N = 200007, M = 5000007, INF = 0x3f3f3f3f;int fa[N], n, m;
bool vis[N];int Find(int x)
{if(fa[x] == x)return x;return fa[x] = Find(fa[x]);
}bool unions(int x, int y)
{int fx = Find(x);int fy = Find(y);if(fx != fy){fa[fy] = fx;//注意合并的是原来的点return true;}return false;//有环,不是树
}int x, y;
int kcase;int main()
{while(scanf("%d%d", &x, &y)){kcase ++ ;bool flag = true;if(x < 0 || y < 0)break;if(x == 0 && y == 0){puts("Yes");continue;}for(int i = 0; i < N; ++ i){fa[i] = i;vis[i] = 0;}while(!(x == y && y == 0)){vis[x] = true;vis[y] = true;if(unions(x, y) == 0){//有环,不是树flag = false;}scanf("%d%d", &x, &y);}int tot = 0;for(int i = 1; i < N; ++ i){if(vis[i] && fa[i] == i)//找有几个根tot ++ ;}if(tot != 1)flag = false;//cout << tot << "ok" <<endl;//入度大于1了或者成树林了if(flag)printf("Yes\n");elseprintf("No\n");}return 0;
}

2. 有向图(hdu 1325 Is It A Tree?)

题目大意:判断一个有向图是不是一棵树

判断条件:无环,一个根节点,(只有一个入度为0的结点,不存在入度大于1的结点)

我觉得一个树应该一定有一个根节点,AC了,但是好多题解都是可以有0个根节点或者有1个根节点,也AC了…

性质:根节点入度为0,其余所有的节点入度均为1。

注意是有向图的树,所以如果一个点入度大于1就说明不是树。 而无向图就没有这个限制。

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<bitset>
#include<queue>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const int N = 200007, M = 5000007, INF = 0x3f3f3f3f;int fa[N], n, m;
bool vis[N];int Find(int x)
{if(fa[x] == x)return x;return fa[x] = Find(fa[x]);
}bool unions(int x, int y)
{int fx = Find(x);int fy = Find(y);if(fx != fy){fa[fy] = fx;//注意合并的是原来的点return true;}return false;//有环,不是树
}int x, y;
int kcase;int main()
{while(scanf("%d%d", &x, &y)){kcase ++ ;bool flag = true;if(x < 0 || y < 0)break;if(x == 0 && y == 0){printf("Case %d is a tree.\n", ++ kcase);continue;}for(int i = 1; i < N; ++ i){fa[i] = i;vis[i] = 0;}while(!(x == y && y == 0)){vis[x] = true;vis[y] = true;//!因为树只有一条边指向节点,根没有边指向根节点,所以如果有两个及以上的边指向它就说明不是树if(Find(y) != y)flag = false;else if(unions(x, y) == 0){//有环,不是树flag = false;}scanf("%d%d", &x, &y);}int tot = 0;for(int i = 1; i < N; ++ i){if(vis[i] && fa[i] == i)//找有几个根tot ++ ;/*if(tot > 1){flag = 1;break;}*/}if(tot != 0 && tot != 1)flag = false;//cout << tot << "ok" <<endl;//入度大于1了或者成树林了if(flag)printf("Case %d is a tree.\n", kcase);elseprintf("Case %d is not a tree.\n", kcase);}return 0;
}

判断一个图是否为树(有向图以及无向图)相关推荐

  1. (HDU4324)判断一个图中是否存在两点的出度相同

    题目:Triangle LOVE 因为每两个点一定有且仅有一条指向边,那么先假定点按顺序1,2,....n,每个点一定指向后面的点,即1指向2,3,4.....n,2指向3,4,5....n..... ...

  2. 判断图有无环_【转】判断一个图是否有环 无向图 有向图

    无向图: 法1: 如果存在回路,则必存在一个子图,是一个环路.环路中所有顶点的度>=2. n算法: 第一步:删除所有度<=1的顶点及相关的边,并将另外与这些边相关的其它顶点的度减一. 第二 ...

  3. 判断一个图是否有环(有向图,无向图)

    无向图: 法1: 如果存在回路,则必存在一个子图,是一个环路.环路中所有顶点的度>=2. n算法:   中 第一步:删除所有度<=1的顶点及相关的边,并将另外与这些边相关的其它顶点的度减一 ...

  4. 图论--拓扑排序--判断一个图能否被拓扑排序

    拓扑排序的实现条件,以及结合应用场景,我们都能得到拓扑排序适用于DAG图(Directed Acyclic Graph简称DAG)有向无环图, 根据关系我们能得到一个线性序列,实现的方式是DFS,具体 ...

  5. c语言 判断一个图是否全连通_【连载】(判断执行语句)乐创DIY C语言讲义——3.8节(2)...

    2 判断执行语句 判断执行语句,执行时候会有一个条件判断,一旦当条件判断为真,即True的时候,就执行相应的语句,满足条件被执行的语句用大括号"{}"括起来.由于在C语言中没有用于 ...

  6. 判断一个图中有无环路的存在

    这里要引入两个概念: 1.树边:是一条未被遍历过的边,它指向一个未被访问过的点. 2.反向边:是一条未被遍历过的边,它指向一个被访问过的点. 如果图中有环路的存在,那么环路的最后一个边必然是一条反向边 ...

  7. c语言 判断一个图是否全连通_C语言:程序运行流程图与顺序结构语句

    程序运行流程图 流程图是描述问题处理步骤的一种常用图形工具,它是由一些图框和流程线组成的.流程图描述问题的处理步骤,形象直观,便于阅读.画流程图时必须按照功能选用相应的流程图符号,常用的流程图符号如下 ...

  8. c语言 判断一个图是否全连通_基于云平台的全链路大规模网络连通性检测系统详解...

    虚拟网络排查问题困难,传统的traceroute等工具很难起到太大作用,大部分情况下都需要到宿主机.混合云网关上抓包来troubleshooting,耗时又费力.有些场景中包的传送路径比较长(如跨域. ...

  9. 【数据结构和算法笔记】图的相关概念(有向图,无向图......)

最新文章

  1. windows上报错:Could not find a version that satisfies the requirement torch==0.4.1
  2. 搞对象的时候走神儿了
  3. python中api是指什么_python中API接口是什么
  4. Linux文件/目录 所有者/所在组
  5. java 模板方法设计模式_Java中的模板方法设计模式
  6. Java写入磁盘阵列_磁盘阵列RAID介绍及计算公式
  7. RDD Join 性能调优
  8. surging+EFCore 服务实现入门
  9. yacc 简易计算机规则,Lex Yacc 学习笔记(2)- 简单计算器
  10. c语言电话订餐管理系统
  11. 物联网(IOT)之常见物联网通信技术概览-有线篇
  12. Git 初接触 (四) Git的分支操作
  13. spring学习笔记 (6)使用mybatis操作数据库增删改查
  14. 如歌岁月--之《老鹰之歌》
  15. 13.爬虫训练场集成文件采集案例,来学习一下怎么实现的
  16. 年薪40万AI工程师必备的能力项,你达标了吗?
  17. box-shadow上下左右四个边框设置阴影样式
  18. IT-linux-top系列--top静态使用
  19. 智慧充电桩开发让充电变得更加安全
  20. 正则表达式前瞻(?=)、后顾(?<=)、负前瞻(?!)、负后顾(?<!)

热门文章

  1. 栈与队列4——用一个栈实现另一个栈的排序
  2. TechEd 2010-如何构建企业级ETL 后续补充
  3. 关于大搜车「无线开发中心」团队
  4. Aliyun LOG Java Producer 快速入门
  5. ng-model 绑定checkbox 取不到值?
  6. FutureTask demo
  7. 虚拟化--YESLAB DC Vphere5 上课PDF
  8. js如何关闭当前页,而不弹出提示框
  9. mysql 客户端提示“Cannot proceed because system tabl...
  10. 海思3531D上编译FFmpeg源码操作步骤