前言:    图论乃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

如有问题,请在评论区指出或私信我,

谢谢!

(点个赞再走呗)

图论初步<蒟蒻专属文章>的更多相关文章

  1. 图论初步2<蒟蒻专属,大佬勿喷>

    前言: 本节课讲的是图论的几种遍历方式,若没看图论初步1的赶紧去看 https://www.cnblogs.com/Craker/p/12271090.html 正文: 零.温故而知新 上节课我们学的 ...

  2. 蒟蒻关于斜率优化DP简单的总结

    斜率优化DP 题外话 考试的时候被这个玩意弄得瑟瑟发抖 大概是yybGG的Day4 小蒟蒻表示根本不会做..... 然后自己默默地搞了一下斜率优化 这里算是开始吗?? 其实我讲的会非常非常非常简单,, ...

  3. 一个蒟蒻对FFT的理解(蒟蒻也能看懂的FFT)

    建议同学们先自学一下"复数(虚数)"的性质.运算等知识,不然看这篇文章有很大概率看不懂. 前言 作为一个典型的蒟蒻,别人的博客都看不懂,只好自己写一篇了. 膜拜机房大佬 HY 一. ...

  4. 一个GD初二蒟蒻的自我介绍

    emmm……今天博客第一天使用呢,好激动啊…… 这里是一个来自GD的初二蒟蒻+无脑OIER,什么都不会 NOIP2017普及组:260压线1=还是看RP过的…… GDKOI2018:120暴力大法吼啊 ...

  5. 算法描述》LCA两三事(蒟蒻向)

    LCA是图论中常用的解决树形结构子问题的工具,这一问题一般需要用一个简短的子函数直接解决,但是这对于广大蒟蒻们仍然是一个不小的问题. LCA是指在树形结构中两点的最近公共祖先,对于这个问题,直接向上找 ...

  6. [New!!!]欢迎大佬光临本蒟蒻的博客(2019.11.27更新)

    更新于2019.12.22 本蒟蒻在博客园安家啦!!! 本蒟蒻的博客园主页 为更好管理博客,本蒟蒻从今天开始,正式转入博客园. 因为一些原因,我的CSDN博客将彻底不会使用!!!(带来不便,敬请谅解) ...

  7. NOIp蒟蒻的爆零记——HA-0132

    考前: 从十一月开始的听课集训,连考六场:考前的最后两天写(da)着(zhe)各种各样的奇(C)葩(S)模板:一周的疯狂,已经过去: 考前的一晚:第二批高二的六个人聚在一起(还有滑稽大师),愉快的玩( ...

  8. 【BZOJ-4636】蒟蒻的数列 动态开点线段树 ||(离散化) + 标记永久化

    4636: 蒟蒻的数列 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 247  Solved: 113[Submit][Status][Discuss ...

  9. 【蒟蒻の进阶PLAN】 置顶+持续连载

    看到周围神犇们纷纷列计划,本蒟蒻也决定跟随他们的步伐,计划大约是周计划吧,具体怎么安排我也不确定.. 2015.12.30 刚刚学习完最基础的网络流,需要进行这方面的练习,从简到难,有空余的话尝试学习 ...

随机推荐

  1. 利用单臂路由实现VLAN间的路由

    实验4:利用单臂路由实现VLAN间的路由. 实验原理:  实验内容: 本实验模拟公司网络场景,路由器R1是公司的出口网关,员工PC通过接入层交换机(如S2和S3)接入公司网络,接入层交换机又通过汇聚交 ...

  2. 安装Linux系统后配置的一般步骤

    安装linux后配置的一般步骤 最近在尝试不同的linux系统,记录一下安装完linux之后常用的软件的安装方法 1.源的更新 ubuntu 源的更新方法 参考(没有测试过,但是都大同小异,不行就换一 ...

  3. Netty Learning Notes

    简介 Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端. Netty是一个NIO客户端服务器框架,可以快速轻松地开发网络应用程序,例如协议服务器和客户端. ...

  4. 1.1、webrtc的历史和现状

    1.1.webrtc的历史和现状 本书目录 温馨提示:本书的内容,将按照顺序一一展开,上篇文章阐述本书的诞生的原因,推荐阅读方式等. 如果你还没有阅读上一篇文章(必读前言—— 作者的独白),我建议返回 ...

  5. Codeforces Round #622 (Div. 2) C1. Skyscrapers (easy version)(简单版本暴力)

    This is an easier version of the problem. In this version n≤1000n≤1000 The outskirts of the capital ...

  6. 解析C语言编程对缓冲区的理解

    转载自:http://soft.chinabyte.com/database/47/12481547.shtml 下面介绍缓冲区的知识. 一.什么是缓冲区 缓冲区又称为缓存,它是内存空间的一部分.也就 ...

  7. nginx+keepalived实现主从高可用

    设备: 主:192.168.200.122 从:192.168.200.124 安装:两台都分别安装nginx以及keepalived 两台机步骤一致一主一从 安装nginx的依赖包 [root@lo ...

  8. C语言:统计整型变量m中各数字出现的次数,-去掉一个最高分和一个最低分,然后求平均值,(注意最低分和最高分可能有多个数并列)

    //统计整型变量m中各数字出现的次数,并存放在数组a中,其中,a[0]存放0出现的次数,a[1]存放1出现的次数. #include <stdio.h> ]) { int i; ; i&l ...

  9. JPA中实现双向多对多的关联关系(附代码下载)

    场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...

  10. Linux - 找到正在使用的 Shell 是哪个

    1. ps -p $$ 一个名为 "$$" (这是shell的特殊参数),表示当前你正在运行的 shell 实例的 PID 2. echo $0 3. echo $SHELL - ...