图论初步<蒟蒻专属文章>
前言: 图论乃noip之重要知识点,但有点难理解 本人因此吃过不少亏
因为本人实在太弱,所以此篇乃正宗<蒟蒻专属文章>
正文:(本文仅介绍图论中的重点、难点,其余部分略将或不讲)
图一般来说有二种存储方法:邻接矩阵和邻接表
邻接矩阵:
存储:拿二维数组来存
for(int i=;i<=n;++i){ //f[q][z]表示点q与点z有没有边相连接
cin>>q>>z; //noip基本别指望,最多三四十分
f[q][z]=; //无向边要存双向
f[z][q]=;
}
可是,虽然存储简单,可效率也太低了(尤其是些超级稀疏的矩阵)
而且,坏处还没完:读取效率也很低!
读取:
cin>>x;//读入x,查与x有关的点
for(int i=;i<=n;++i){ //据说++i比i++快一些
if(f[x][i]==){
cout<<i<<" ";
}
}
这么暴力的for循环,不超时才怪呢
所以,另一种办法来了:邻接表!!
原理:
通过链表的形式,高效的存储/读取边
先使用struct:(我太蒻,只会用struct存)
struct node{
int u,v,next;//u起点,v终点,next待会在说 啥意思
}e[MAXN*]; //无向图要*2(原因:要存两次)!!!!有向图似乎只要一倍
//这类数组名都用e,养成好习惯
读取:
for(int i=;i<=n;++i){
cin>>q>>z; //这类函数名名都用e,养成好习惯
add(q,z); //无向边要存双向
add(z,q); //通常 用自定义函数实现
}
add(加边函数): 注意:要定义head数组,表示点i当前的第一个连接的数组下标!!!!!

代码:
void add(int x,int y,){
++tot;
e[tot].u=x;
e[tot].v=y;
e[tot].next=head[x];
head[x]=tot;
}
一些question&Answer&注意事项:
1:为什么偏偏要插队?
Answer:因为如果不插队,将要加的边就没法指向上一个了(难道你还for一遍?);
2:链表结构其实还有很多其余的办法实现,但我写的这种更适合初学者
(emm.....好像就两个也)
“遍历”方式:
cin>>a; //问和a号点相邻的边有哪些
for(int i=head[a];i!=;i=e[i].next){ //从点a的第一条边开始,若为0结束
cout<<e[i].u<<" "<<e[i].v<<endl; // 到下一个数组下标
}
(完)
写在后面的话:
这是我的第一篇博客(bug一定很多)
本人的个人主页(洛谷)https://www.luogu.com.cn/user/236929
本人的个人主页https://www.cnblogs.com/Craker/
欢迎来访!
谢谢!
本人QQ:2783119105
本人邮箱:yixuazeng66@126.com
如有问题,请在评论区指出或私信我,
谢谢!
(点个赞再走呗)
图论初步<蒟蒻专属文章>的更多相关文章
- 图论初步2<蒟蒻专属,大佬勿喷>
前言: 本节课讲的是图论的几种遍历方式,若没看图论初步1的赶紧去看 https://www.cnblogs.com/Craker/p/12271090.html 正文: 零.温故而知新 上节课我们学的 ...
- 蒟蒻关于斜率优化DP简单的总结
斜率优化DP 题外话 考试的时候被这个玩意弄得瑟瑟发抖 大概是yybGG的Day4 小蒟蒻表示根本不会做..... 然后自己默默地搞了一下斜率优化 这里算是开始吗?? 其实我讲的会非常非常非常简单,, ...
- 一个蒟蒻对FFT的理解(蒟蒻也能看懂的FFT)
建议同学们先自学一下"复数(虚数)"的性质.运算等知识,不然看这篇文章有很大概率看不懂. 前言 作为一个典型的蒟蒻,别人的博客都看不懂,只好自己写一篇了. 膜拜机房大佬 HY 一. ...
- 一个GD初二蒟蒻的自我介绍
emmm……今天博客第一天使用呢,好激动啊…… 这里是一个来自GD的初二蒟蒻+无脑OIER,什么都不会 NOIP2017普及组:260压线1=还是看RP过的…… GDKOI2018:120暴力大法吼啊 ...
- 算法描述》LCA两三事(蒟蒻向)
LCA是图论中常用的解决树形结构子问题的工具,这一问题一般需要用一个简短的子函数直接解决,但是这对于广大蒟蒻们仍然是一个不小的问题. LCA是指在树形结构中两点的最近公共祖先,对于这个问题,直接向上找 ...
- [New!!!]欢迎大佬光临本蒟蒻的博客(2019.11.27更新)
更新于2019.12.22 本蒟蒻在博客园安家啦!!! 本蒟蒻的博客园主页 为更好管理博客,本蒟蒻从今天开始,正式转入博客园. 因为一些原因,我的CSDN博客将彻底不会使用!!!(带来不便,敬请谅解) ...
- NOIp蒟蒻的爆零记——HA-0132
考前: 从十一月开始的听课集训,连考六场:考前的最后两天写(da)着(zhe)各种各样的奇(C)葩(S)模板:一周的疯狂,已经过去: 考前的一晚:第二批高二的六个人聚在一起(还有滑稽大师),愉快的玩( ...
- 【BZOJ-4636】蒟蒻的数列 动态开点线段树 ||(离散化) + 标记永久化
4636: 蒟蒻的数列 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 247 Solved: 113[Submit][Status][Discuss ...
- 【蒟蒻の进阶PLAN】 置顶+持续连载
看到周围神犇们纷纷列计划,本蒟蒻也决定跟随他们的步伐,计划大约是周计划吧,具体怎么安排我也不确定.. 2015.12.30 刚刚学习完最基础的网络流,需要进行这方面的练习,从简到难,有空余的话尝试学习 ...
随机推荐
- ES6-三点运算符
首先理解一下函数总的arguments变量,这个变量是函数内部自动生成的,他用来保存传入函数的实参,是一个伪数组. 例: function fun(a,b){ console.log(argument ...
- 排序算法大荟萃——希尔(Shell)排序算法
1.基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组.所有距离为d1的倍数的记录放在同一个组中.先再各族中进行直接插入排序,然后取第二个增量d2<d1重复上述的分组 ...
- OO Byebye
一.架构设计 1.第一次作业 首先做的就是把所有的Element全部存起来,我把UmlClass和UmlInterface重新用两个新的类来记录了一下,用于更快地找到他们的关联.其实总体思路还是比较简 ...
- maven安装和使用前的几个点
以前的以前,听说过maven,也有幸安装过,没怎么用过,都是按照网上别人的记录照着做的,感觉好没有意思,现在我想自己弄清楚一些事情.一起来源于配置文件,和在网上多搜索多看,多实践. 我用的包是这个ap ...
- C语言:将字符串中的前导*号全部移到字符串的尾部。
//规定输入的字符串中只包含字母和*号,fun函数:将字符串中的前导*号全部移到字符串的尾部. #include <stdio.h> void fun( char *a ) { ]; ch ...
- 【JavaWeb】Spring入门——HelloWorld
0.为什么要使用Spring https://www.cnblogs.com/zmmi/p/7922186.html 1. 下载jar包 https://blog.csdn.net/qq_435401 ...
- php之新的开始---php的相关及其环境搭建
写在前面:首先,感谢“奇矩”给的这次机会,不论结果如何,我都会尽我最大的努力! 在今晚之前,如果说,我与php的接触是停留在知道的阶段,那今晚过后,我想我算是认识了php.php作为一门编程语言,已经 ...
- linux开机启动项问题。6版本与7版本不同之处 。
参考 网址:https://blog.csdn.net/weixin_41909810/article/details/82775247
- SQLServer亿万级数据优化
--创建分区文件组alter database seclab_sgk_db add filegroup seclab_sgk_db_01alter database seclab_sgk_db add ...
- 转专业后补修C语言的一些体会(4)
1.对于文件的打开和关闭操作:首先了解到,C语言将文件分成了两种类型:文本文件和二进制文件.针对这两种文件,各有不同的文件读写方式.在C语言中,文件的操作要借助一个文件指针 即FILE 类型,定义了一 ...