@atcoder - ARC092F@ Two Faced Edges】的更多相关文章

目录 @description@ @solution@ @accepted code@ @details@ @description@ 给出一个有向图,对每条边都做一次询问: 翻转这条边后,对原图的强连通分量是否有影响? 点的个数 N ≤ 1000,边的个数 M ≤ 200000. 原题传送门. @solution@ 看到 5s 时限,大胆猜测时间复杂度 O(NM). 一条边 u->v 翻转造成的影响: 如果这条边在强连通分量里(等价于存在路径 v 到 u),当不存在另一条路径 u 到 v 时,…
Atcoder 题面传送门 & 洛谷题面传送门 orz ymx,ymx ddw %%% 首先既然题目要我们判断强连通分量个数是否改变,我们首先就将原图 SCC 缩个点呗,缩完点后我们很自然地将图中的边分为两类:在某个强连通分量中,和不在强连通分量中,我们对这两个情况分别进行讨论. 下面又到了喜闻乐见的找性质的时间了.首先,对于不在同一个强连通分量中的边,把它翻转之后不会影响强连通分量个数,因为这条边不在强连通分量里面,即便把它断掉也不影响强连通分量内部的点的可达性,因此把它翻转只可能接链成环,减…
正题 题目链接:https://www.luogu.com.cn/problem/AT3945 题目大意 \(n\)个点\(m\)条边的一张图,对于每条边求它翻转后强连通分量数量是否变化. \(1\leq n\leq 1000,1\leq m\leq 2\times 10^5\) 解题思路 对于一条\((x,y)\)的边. 如果原来\(y\)能走到\(x\),那么考虑现在是否强连通分量是否减少,就是说如果存在一条\(x->y\)的路径不经过这条边那么不变,否则减少. 如果原来\(y\)不能走到\…
要求,翻转一条边,强连通分量个数是否会改变. 考虑连通分量个数会改变的因素: 即\(v\to u\)是否成立,以及翻转前,是否有一条\(u \to v\)的路径不经过该条边 以上当只有一个满足时,连通分量数目改变. 考虑第一个条件,每次\(O(n)\)的暴力搜索就好了 . 考虑第二个条件,等同于,\(u \to v\)是否有两条可达路径,可以提前进行路径上的搜索dp. 所以复杂度\(O(n*m)\)…
AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\)类点.每个\(A\)类点可以和横纵坐标都比它大的\(B\)类点匹配,求最大匹配数. 分析: 网络流裸题. #include <bits/stdc++.h> using namespace std; #define MAXN 110 #define inf 0x7fffffff int head[5…
最近感觉自己思维僵化,啥都不会做了-- ARC103 F Distance Sums 题意 给定第 \(i\) 个点到所有点的距离和 \(D_i\) ,要求构造一棵合法的树.满足第 \(i\) 个点到其他所有点的距离和为 \(D_i\) . \(n \le 10^5\) . 技巧 寻找特殊的量,推出整个树的形态 题解 题解 整棵树里头,最为特殊的点有两类.一个是重心,这是距离和最小的点,另一个是叶子节点,这是距离和最大的节点.考虑如果我们先确定重心,那么接着就不大好往下推了,因为我们并不知道子树…
C - 2D Plane 2N Points 把能连边的点找到然后跑二分图匹配即可 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define space putchar(' ') #define enter putchar('\n') #define mp make_pair #define MAXN 100005 //#define ivorysi u…
C - 2D Plane 2N Points 题意 二维平面上有\(N\)个红点,\(N\)个蓝点,一个红点和一个蓝点能配成一对当且仅当\(x_r<x_b\)且\(y_r<y_b\). 问最多能形成多少pair. 思路 无脑版本:可以匹配的连边,然后跑匈牙利. 正确的贪心姿势:对于所有的点按\(x\)从小到大排序,对于蓝点,要匹配的最优的红点即为 在其之前出现的 \(y\)小于它的 且\(y\)最大的 红点.用一个\(set\)维护红点的\(y\)坐标即可. Code #include <…
题目链接:Weights on Vertices and Edges 题目大意:有一个\(n\)个点\(m\)条边的无向图,点有点权,边有边权,问至少删去多少条边使得对于剩下的每一条边,它所在的联通块的点权值和大于等于该边的边权 其实是蛮简单的一道题目,为什么当时就自闭了呢... 正向删边明显不靠谱,于是我们考虑反向加边,答案就是\(m-\)加入的边数 我们按照边权排序,使用并查集维护点权值和,同时记录一个\(cnt\)数组表示当前存在于该联通块内但未加入答案的边数 如果说当前联通块的点权值和大…
题目链接:https://atcoder.jp/contests/nikkei2019-qual/tasks/nikkei2019_qual_e 题意:给出一个 n 个点 m 条边的无向图,每个点和每条边都有权值,让你删除一些边,使得最终的图中满足条件:一条边存在当且仅当包含该边的连通块的点权值和大于等于该边权值,问最少要移走多少条边. 题解:删边不好做,考虑加边,对于每条边,判断加入是否合法.按边权从小到大排序进行加边,要加入一条边之前,若之前两点不连通,则合并起来变成一个连通块,可以用并查集…