后续会给出一些代码
n个点,m个双向边,无重边,可能有自环,一条航线需要满足以下要求:从任意一个点出发,在任意一个点结束,经过m-2条边恰好2次,经过2条边恰好1次。求有多少本质不同的航线,两航线本质不同当且仅当存在1条边,在两航线中经过次数不同。
N ≤ 1e5 , M ≤ 1e5.
首先这道题要判连通图,这个没问题
然后这道题因为是无向图,而且可以有自环,所以我们的DP不是很好搞,于是我们思考欧拉路径,现在把所有的双向边全部倍增,一条边变成两条边,那么现在显然要让其在任意一个点出发,任意一个点结束,经过m-2条边恰好两次,经过2条边恰好一次就变成了求新图中删去某两条边的欧拉路径有多少条
于是我们考虑删边,因为我们倍增了,所以新图中所有点的度数均为偶数,那么对于一个自环来说,我们删去这条边,则这个点的度数仍然是偶数,对于一个不是自环的边来说,我们删去这条边之后,u的度数减1,v的度数减1
回顾欧拉路径存在的充要条件是:连通图并且奇数出度的点的数量是0个或者2个
则我们删两条边之后保证还存在欧拉路径的情况就是
删掉一个自环,再删掉一个自环 : C(2, 自环数)
删掉一个自环,删掉任意一条非自环边:自环边数*其他边数
删掉一条非自环边,删掉一条非自环边:C(2,非自环边数)
最后加法原理加起来就可以了
题目大意:给定平面上的n个点,要求将每个点染成红色/蓝色,使得每行/每列的红色点数和蓝色点数之差 < = 1
保证所有数据都在2e5范围内。输出方案,保证有解。
Tag:二分图 & 欧拉回路
这题感觉好毒啊,今天讲到欧拉回路才知道怎么搞
我们可以对于这个坐标建立二分图,x坐标为二分图左边一侧,y坐标为二分图右边一侧,则我们如果存在一个点,就把二分图中左边的这个X坐标连上右边的这个Y坐标,然后对于所有奇数度数的点,我们把他们互相连接,得到一个存在欧拉回路的图,然后我们跑一边欧拉回路的fluery算法然后染色就可以了
因为有向图有欧拉回路的条件是:1、联通。2、所有点入度等于出度。
对于混合图,我们对无向边任意定向,如果入度和出度加起来为奇数那么肯定不存在欧拉回路,所以定完向后,出度-入度为偶数。
任意定向后我们考虑将一条从u到v的边反向会导致u出度-1,入度+1;v出度+1,入度-1。这就很棒棒了。我们把出度大于入度的点归为一类,出度小于入度的归为一类,建边跑网络流就ok了。
只建定向的无向边,容量为1,方向一样。
S到出度大于入度的容量为(出度-入度/2)。
网络流判断是否满流。
给出一个n个点m条边的无向图,每个边有一正一反两个权值;现要从点1出发,对每条边经过且仅经过一次;求一种方案使经过的最大权值最小;
二分答案加混合图求欧拉回路转网络流
一条单向的铁路线上,依次有编号为 1, 2, …, n 的 n 个火车站。每个火车站都有一个级别,最低为 1 级。现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车站 x,则始发站、终点站之间所有级别大于等于火车站 x 的都必须停靠。(注意:起始站和终点站自然也算作事先已知需要停靠的站点)
例如,下表是 5 趟车次的运行情况。其中,前 4 趟车次均满足要求,而第 5 趟车次由于停靠了 3 号火车站(2 级)却未停靠途经的 6号火车站(亦为 2 级)而不满足要求。
现有 m 趟车次的运行情况(全部满足要求) ,试推算这 n 个火车站至少分为几个不同的级别。
车站分级 NOIP 2013年普及组
这题十分地暴力,对于一次读入,我们把所有没有读入的连均连上所有读入的点,然后跑一边拓扑排序求最长链即可
给定n,a,b要求输出一组长度为n的序列,满足要求:任意连续a个数字和大于0,任意连续b个数字和小于0。
这题我们把其想象成一个前缀和形式,则点i表示从1到点i的前缀和,然后从小的向大的连边,类似于查分约束,然后拓扑搞一下,从入度为0的点开始,这些点标为1,表示是第一层的,他们最小,所以他们的sum就是1,然后不断地拓扑排序,最后sumi-sumi-1就是我们的i的答案,因为这道题是spj,所以只需要输出一组正确解就可以了
现在给你n个物种和m条能量流动关系,求其中的食物链条数。
物种从1到n编号
M条能量流动关系形如
a1->b1
a2->b2
a3->b3
……
am->bm
其中ai->bi表示能量从物种ai流向物种bi,注意单独的一种生物不算一条食物链
求食物链条数。
因为有先后顺序,并且不存在环,因此有拓扑关系,所以我们拓扑,在拓扑的过程中我们dp一下看一下转移能有几种方法就可以了
还会有后续哦~