图论初步<蒟蒻专属文章>
前言: 图论乃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 刚刚学习完最基础的网络流,需要进行这方面的练习,从简到难,有空余的话尝试学习 ...
随机推荐
- Chrome无法从该网站添加应用,扩展程序和用户脚本
#开始 更新谷歌浏览器之后发现不能通过本地 crx文件安装离线插件了 网上找到的方法有两种 一个就是通过添加浏览器参数解决 但是这个方法我尝试之后失败了 第二个方法就是用工具安装 具体如何太麻烦了就没 ...
- Windows Server 2012R2 实现AD双域控制器互为冗余
前言 在部署活动目录服务的时候,首先应该考虑域控制器的安全性,主域控一旦崩掉,一般很难修复,后果非常严重,本文介绍在活动目录中部署两台域控制器,两台都是主控,互为冗余. 环境网络192.168.100 ...
- PostgreSQL日期加减
在PostgreSQL中可以直接对时间进行加减运算:. SELECT now()::timestamp + '1 year'; --当前时间加1年 SELECT now()::timestamp + ...
- Servlet线程安全问题(转载)
转载地址:https://www.cnblogs.com/LipeiNet/p/5699944.html 前言:前面说了很多关于Servlet的一些基础知识,这一篇主要说一下关于Servlet的线程安 ...
- go get下载包失败问题
文章引用自 解决go get下载包失败问题 从github克隆 golang在github上建立了一个镜像库,如https://github.com/golang/net就对应是 https://go ...
- Xcode 编译运行旧项目报错解决之路
运行几年前做的项目,发现各种编译报错,一个一个解决记录下: 1.Xcode(Xcode9)编译运行报错,但是在 issue navigatior 栏看不到错误信息: 解决方案:在 show repor ...
- (一)tensorflow-gpu2.0学习笔记之开篇(cpu和gpu计算速度比较)
摘要: 1.以动态图形式计算一个简单的加法 2.cpu和gpu计算力比较(包括如何指定cpu和gpu) 3.关于gpu版本的tensorflow安装问题,可以参考另一篇博文:https://www.c ...
- pdf.js的使用(2)新的需求已经出现,怎么能够停止不前(迪迦奥特曼主题曲)哈哈哈。^_^
来,咱们看图说事 按钮1,2是pdf.js自带的,分别对应顺时针旋转90度,逆时针旋转90度.于是乎又要我做一个旋转180度的按钮,诺!按钮3来了. 1.别怂,干!首先顺藤摸瓜,看按钮1,2的html ...
- java中静态初始化块的执行顺序
在java中,其应该是先于所有的方法执行. 下面是测试代码: public class Test1 { static{ System.out.println("执行静态初始化块test1.. ...
- netty同时实现http与socket
(1)启动类 package test; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.EventLoopGro ...