从外地学习回来,我对图论才有认识(以前就没接触过,非常尴尬),说实话,学好图论的重要性,就像学数学时在进行解析几何时,图极有可能是打开答案的最后秘钥,也就是数形结合,而懂的人永远明白,用图解决绝对比用解析简单(一般情况)。而图论对于oi选手说,就是一大杀器,有可能利己,也可能抱憾终身。所以说图论的重要性就很显然了。
大家在进入图论的时候,应该先掌握链式前向星建图,当然也可以叫邻接表,先附上我喜欢的模板
struct node{ int next,to,w; }edge[maxn<<4]; int head[maxn],cent; void add(int u,int v,int w){ edge[++cent]=(node){head[u],v,w}; head[u]=cent; }
——所谓模板,也就是自己喜欢的颜色涂上而已。
当然还有一些其他知识,比如说vector建图,这种建图的方式优点是难度小,而且还可以排序,这个在NOIP2018的D2T1上有极大优势。
scan(a),scan(b);
vec[a].push_back(b);
vec[b].push_back(a);
然后只要简单地定义排序一下,即可用食。
还有树形dp,这在树形图中将是一大助力,这里是dp求直径。
void dp(int s,int fa){ for(int i=head[s];i;i=edge[i].next){ int y=edge[i].to; if(vi[y]) continue; if(y==fa) continue; dp(y,s); an=max(anx,root[x]+root[y]+edge[i].w); root[s]=max(root[s],root[y]+edge[i].w); } }
在入门之后,请仔细思考与总结
总结方法:
1. 反向建边 例题
2. 路径记数,加法原理,并加上限制条件 例题
3. 巧妙运用二分图的检验 例题
4. 学习二分图的技巧,学会在只有两种条件有关系时,转化成二分图 例题
5. 深刻理解floyd的逐个点处理 例题
6. 二分答案对于路径长度和其他条件的单调性处理 如4中例题
7. 分清SPFA(没死透)和Dij两者各自的优势,注意负环
8. 在最小生成树中,注意prim和kruskal各自的优势