[Luogu3731][HAOI2017]新型城市化(网络流,Tarjan) 题面 洛谷 给定一张反图,保证原图能分成不超过两个团,问有多少种加上一条边的方法,使得最大团的个数至少加上\(1\). 题解 本来并不会做的,看题解第一句话就会了QwQ 对于在反图上没有边的点之间是存在一条边的. 那么考虑原图的一个团对应在反图上是什么,因为原图的团内的点两两之间有边,所以对应在反图上两两之间无边.所以原图的一个团对应着反图的一个独立集. 因为原图可以分解为不超过\(2\)个团,所以反图可以分解成一个二…
洛谷 题意: 给出两个最大团的补图,现在要求增加一条边,使得最大最大团个数增加至少\(1\). 思路: 我们求出团的补图,问题可以转换为:对于一个二分图,选择删掉一条边,能够增大其最大独立集的点集数. 然后做法就是考虑在最大流的残余网络上,对容量为\(1\)的边求强连通分量(包含源点.汇点). 若存在一条边\((x,y)\)为匹配边,并且\(x,y\)在不同的强连通分量中,那么\((x,y)\)这条边为必经边,即最大匹配中包含这条边:若\((x,y)\)为非匹配边并且\(x,y\)在同一强连通分…
我到底怎么建的图为啥要开这么大的数组啊?! 神题神题,本来以为图论出不出什么花来了. 首先要理解'团'的概念,简单来说就是无向图的一个完全子图,相关概念详见度娘. 所以关于团一般都是NP问题,只有二分图例外.而题目中有这样一句话"n座城市可以恰好被划分为不超过两个城市群",并且给出的是没有的边,也就是这个图的补图,两个团就很显然表示这个补图是个二分图(我一开始还考虑1个团咋整后来发现根本不用整= =),模型就变成了二分图的最大独立集,考虑最大独立集=n-最大匹配,那么只要求出删掉哪些边…
题目显然可以转化为求每一条边对二分图最大独立集的贡献,二分图最大独立集\(=\)点数\(-\)最大匹配数,我们就有了\(50pts\)做法. 正解的做法是在原图上跑\(Tarjan\),最开始我想复杂了,后来才意识到,只要存在这样一个强连通分量,那么断掉分量内的任意一条边都不会破坏其连通性,即不管删掉哪个连边都一定会有新的匹配补充.只要让两个点不在同一个分量里面,而且原来是满流的(匹配可行边),那么它就是一个可用边(匹配必须边). #include <bits/stdc++.h> using…
先求最小割,然后对残量网络跑Tarjan.对于所有满流的边,若其两端点不在同一个SCC中,则这条边是满足条件的. 证明见 来源:HAOI2017 新型城市化…
题目分析: 这题出的好! 首先问题肯定是二分图的最大独立集,如果删去某条匹配边之后独立集是否会变大. 跑出最大流之后流满的边就是匹配边. 如果一个匹配边的两个端点在一个强连通分量里,那这条边删掉之后我们就可以找到一个替代方案使得匹配不变小. 具体的,假设这两个点是x,y.因为两者之间连的是匹配边,那么存在一个路径从t->y->x->s.那只要从s有另一条路径到y或者从x有另一条路径到t那就构成一个强连通分量,我们只考虑s到y的情况. 如果存在一条这样的路,我们会发现每次从X集合跳到Y集合…
题目链接(洛谷):https://www.luogu.org/problemnew/show/P3731 题意概述:给出一张二分图,询问删掉哪些边之后可以使这张二分图的最大独立集变大.N<=10000,0<=M<=min (150000,N(N-1)/2). 这个题首先你得总结出题意就是这个样子不然就是凉的..... 二分图的最大独立集,可以想到网络流完成(定理:二分图的最大独立集=二分图点数-二分图最大匹配).当最小割边小的时候独立集就变大了,因此问题变删掉哪些边可以让最小割变小. 这…
将未建立贸易关系看成连一条边,那么这显然是个二分图.最大城市群即最大独立集,也即n-最大匹配.现在要求的就是删哪些边会使最大匹配减少,也即求哪些边一定在最大匹配中. 首先范围有点大,当然是跑个dinic,转化成最大流.会使最大流减少的边相当于可能在最小割中的边,因为删掉它就相当于无代价的割掉了一条边.那么用曾经看到过的结论就可以了:当且仅当该边满流且残余网络(包括反向边)中该边两端点处于不同SCC时,该边可能在最小割中.不太会证.于是tarjan一发就可以了.注意不要把开始给的图和网络流建图搞混…
给出的图中恰包含2个团,则图的补图为一个二分图,其最大独立集为原图的最大团. 我们知道,二分图的最大独立集=V-最小顶点覆盖,最小顶点覆盖=最大匹配. 问题转化为:计算删去后最大匹配减小的边集. 所以建图跑最大流,对残余网络中的每一条满流边讨论. 这需要用到tarjan:若该满流边的端点同属一个强连通,那么通过该边的增广路不是必须的,这条边就不能算在答案里. 码吧.. 建图时要利用二分图染色. 请务必启用-std=gnu++11开关 #include <cstdio> #include <…
Prelude 好,HAOI2017终于会做一道题了! 传送到洛谷:→_→ 传送到LOJ:←_← 本篇博客链接:(●'◡'●) Solution 首先要读懂题. 考场上我是这样想的QAQ. 我们把每个城市看作一个点,在"当前没有贸易关系"的城市之间连边. 此时,如果一个城市集合是一个城市群,那么这个城市集合中的任意两个城市之间都没有边. 因为"可以划分为两个城市群",所以这个图是个二分图. 那么"最大城市群"就是二分图的最大独立集. "…