
图论
Tz_rain
需要做的事情
解题 总结 巩固
解题三个步骤
量化 分析 实现
需要改变的三个问题
性格 心态 思考方式
不要再后悔
展开
-
二分图专题
1.bfs染色void dfs(int x,int c){ mark[x]=c; for(int i=0;i<edge[x].size();i++){ if(mark[edge[x][i]]==-1)dfs(edge[x][i],1-c); else if(mark[edge[x][i]]==c)f=false; }}int find(int原创 2016-10-14 19:18:46 · 323 阅读 · 0 评论 -
记忆宫殿
思路我们此时需要判断出那些点的地位是等价的。即如果AA发生BB一定发生。通过寻找规律可以发现 对于这样的A,BA,B两点是等价的。#include<bits/stdc++.h>using namespace std;const int M=1e3+5;bool to[M][M],son[M],same[M][M],vis[M];vector<int>G[M];int n,m,k,x,原创 2017-07-12 21:12:12 · 592 阅读 · 0 评论 -
一九八四
Tarjan算法我们发现对于一些在图上操作和查询的问题,有时我们可以通过Tarjan来的实现。这里我们针对利用Tarjan解决有关图的联通的问题思路我们发现把一个图转换成一个树的时候,点的联通情况是不变的。流程我们先把图建成树,并且把每个点在那棵树记录下来对于删边的操作有以下的条件要判断 S和T不在一棵树 falsefalse边不是树上的边 truetrue如果S,TS,T都不在原创 2017-07-02 09:49:58 · 318 阅读 · 0 评论 -
二分图最大匹配专题
二分图:简单来说,如果图中点可以被分为两组,并且使得所有边都跨越组的边界,则这就是一个二分图。二分图的一个等价定义是:不含有「含奇数条边的环」的图。图 1 是一个二分图。为了清晰,我们以后都把它画成图 2 的形式。匹配:在图论中,一个「匹配」(matching)是一个边的集合,其中任意两条边都没有公共顶点。例如,图 3、图 4 中红色的边就是图 2 的匹配。例如图 3 中 1、4、5、7 为匹配点,转载 2017-03-04 08:35:26 · 355 阅读 · 0 评论 -
SRM573 Div1
/* 由于每个点存在两个状态(编号和高度)我们用dis[nw][nx]表示到 原来编号为nw把高度改成编号为nx 的距离 于是 dis[s][k1]=dis[t][k2]+abs(h[t]-h[k2]);*/ #include<bits/stdc++.h>using namespace std;typedef long long ll;const int M=55;co原创 2017-04-10 21:26:46 · 323 阅读 · 0 评论 -
SRM 638 DIV2 CandleTimerEasy
现在有n-1个蜡烛,如果点燃了长度为L的蜡烛的一段,那么就需要L个单位时间将这根蜡烛烧完。如果在蜡烛的两端同时点火,那么就只要一半的时间。把蜡烛作为边摆放成一棵有n个节点树,每个节点都是一根或多根蜡烛的一端。在0时刻可以选择任意一个或多个度为1的节点点火,那么经过一定的时间所有的蜡烛都会被燃烧殆尽。注意,如果火焰燃到了一个节点,那么所有以该节点作为端点的蜡烛都会点上火。求对于0时刻不同的点蜡烛的方式原创 2017-02-01 14:49:59 · 268 阅读 · 0 评论 -
SRM 611 DIV2 1000 ElephantDrinkingEasy
有一个N*N的田地,其中有一些田地中有积水。现在在田地周围有一些大象,它们可以向前伸长鼻子来喝到田地中的积水。大象的鼻子足够长,但是不能交叉,且一块田地中只能有一头大象在喝水。如下图,a是合法的,b,c均不合法。现在问最多能有多少头大象喝到水。N<=5因为N很小可以4*N的枚举每一个边缘的格子复杂度为4*N*2^(4*N)然而可以只枚举上下的两排而计算出另外的两排复杂度为4*N*2^(2*N)cla原创 2017-01-31 11:29:21 · 341 阅读 · 0 评论 -
SRM 549 OrderOfTheHats
题意孩子们有N(1<=N<=20)个音标要去学,按照一般的教学法则,每次学一个音标的时候,要先把比这个音标更基础的音标学会。但由于这个教学法则会出现循环需要的情况导致孩子们无法学完,请你帮助他们用最少的次数改变这个教学法则。给定一个vectorspellchart,spellchart[i][j]表示如果为’Y’则音标i必须在j前学习完,否则为’N’。你可以将’Y’改成’N’或者’N’改成’Y’,但原创 2017-01-22 10:39:26 · 362 阅读 · 0 评论 -
SRM 550 TopView
Ralph 往桌子上放了许多个有唯一颜色的矩形纸片(可以重叠),现在给出桌子的俯瞰图,输出Raplh往桌子上放方格的顺序,输出字典序最小的一种。 如果无解,那么输出“ERROR!”思路<1>通过标记每种颜色A,B的四个角来得到A和B的关系; <2>最终可以得到A->B,(表示A在B下)C->D等关系再利用拓扑序来得到答案//处理每一个颜色void add(int t,int x,int y){原创 2017-01-22 16:42:17 · 272 阅读 · 0 评论 -
SRM 583 GameOnABoard
【题意】:给出一个矩阵n*m,每个元素为0或1,对于每一个位置,以其为起点往外走,只能平行于坐标轴走,两个点的距离表示两点间包含1最少的路径上1的个数,一个位置的代价表示它到其他所有点的距离中最大的距离,求所有位置中最小的代价; 【解题思路】:这题其实就是求两个点之间的最短路,所以可以直接dijkstra去做,将点上的0或1表示成两点之间的距离,即边,然后枚举一个起点,求出最短路的最大值就好了。#原创 2017-01-23 15:35:37 · 235 阅读 · 0 评论 -
Tarjan算法详解
Tarjan算法的用途 1.求桥和割点 2.求点和边的双连通分量 3.求强连通 Targan算法的流程 利用dfs来遍历图来构建一种数型的结构 Tarjan算法的两个核心数组 dfn:我们用dfn数组记录 low:我们用low[i]表示一个节点的子树中可以到达最小的dfn (显然对于一个刚刚遍历到的点我们给他赋上一个新的dfn,low)<1>对于第一种用途 Tarjan算法原理原创 2017-03-16 19:49:19 · 930 阅读 · 0 评论