Codeforces.542E.Playing on Graph(二分图)】的更多相关文章

题目链接 \(Description\) 给出一个n个点m条边的无向图. 你每次需要选择两个没有边相连的点,将它们合并为一个新点,直到这张图变成了一条链. 最大化这条链的长度,或输出无解. n<=1000,m<=10000 \(Solution\) 不难发现无解当且仅当存在奇环. 归纳证明:有一个奇环,若与环外一个点合并,这个奇环仍存在:若环内两个点合并,合并两点两边的边数是奇数,合并之后还是至少会有一边边数是奇数,是一个奇环(最后变成一个三角形).这样怎么合并都会剩下一个奇环. 若不存在奇环…
原文链接https://www.cnblogs.com/zhouzhendong/p/CF542E.html 题目传送门 - CF542E 题目传送门 - 51Nod1481 题意 有一幅无向图,它有n个点,m条边,没有自环和重边.定义合并操作,这个合并操作是把两个没有边直接连接的点合并成一个新点,把和旧的两个点至少有一个有边的点和这个新点连边.然后原来的两个旧点删除.这样就把n个点的无向图变成了n-1个点的无向图. 现在,要求你对这个图进行合并操作,最后形成一条链,而且这个链要尽可能的长.一条…
cf 542E - Playing on Graph 题目大意 给定一个\(n\le 1000\)个点的图 求经过一系列收缩操作后能否得到一条链,以及能得到的最长链是多长 收缩操作: 选择两个不直接相连的点,构造一个新点 对于原图中的每一个点,如果它与这两个点中的任意一个有连边 那么它向这个新点连一条边 最后删除选择的两个点,以及所有这两个点的连边 分析 注意到对于一个奇环,无论怎么收缩,都会产生一个新的奇环,最后奇环变成一个三角形,再也缩不了,永远无法变成一条链 只有偶环的图是二分图 对于图中…
题目链接:Codeforces 459E Pashmak and Graph 题目大意:给定一张有向图,每条边有它的权值,要求选定一条路线,保证所经过的边权值严格递增,输出最长路径. 解题思路:将边依照权值排序,每次将同样权值的边同一时候增加,维护每一个点作为终止点的最大长度就可以. #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn…
Playing on Graph Time Limit: 20 Sec  Memory Limit: 512 MB Description Input Output Sample Input 5 4 1 2 2 3 3 4 3 5 Sample Output 3 HINT n <= 1000, m <= 10^5 Solution 我们先考虑无解的情况.显然就是图中有奇环的时候无解,因为你将奇环上两点缩起来,最后必定会变成一个三元环,而三元环是不能合并的.所以就可以Dfs黑白染色一下,若是搜到…
CodeForces 295B Greg and Graph 题解 \(Floyd\) 算法是一种基于动态规划的算法,以此题为例介绍最短路算法中的 \(Floyd\) 算法. 我们考虑给定一个图,要找出 \(i\) 号点到 \(j\) 号点的最短路径.则该最短路径只有两种可能: \(i\) 号点直接到达 \(j\) 号点的路径中产生最短路径 \(i\) 号点经过一些中间点到达 \(j\) 号点的路径中产生最短路径 我们添加一个点 \(k\),使得 \(i\) 号点到 \(j\) 号点再添加后产生…
题意:给定无向图,让你给点加权(1,2,3),使得每条边是两端点点权和维奇数. 思路:一个连通块是个二分图,判定二分图可以dfs,并查集,2-sat染色. 这里用的并查集(还可以带权并查集优化一下,或者干脆用dfs). 计数的时候每个连通块单独考虑,我们从连通块的第一个点开始dfs,如果是该填奇数点,那么当前方案数*=2:分第一个点奇偶两种情况即可. (多组输入一定注意初始化,这次CF多组输入好坑啊... #include<bits/stdc++.h> #define ll long long…
题意:有\(n\)个点,\(m\)条边的无向图,可以给每个点赋点权\({1,2,3}\),使得每个点连的奇偶不同,问有多少种方案,答案对\(998244353\)取模. 题解:要使得每个点所连的奇偶不同,很明显是二分图染色,那么对于某一个联通块,我们可以对左边的点赋\(2\),右边的点赋\({1,3}\),那么左边的点没有选择,只有一种情况,而右边的点每个点可以有两种情况,如果右边的点数是\(k_2\),那么方案数就是\(2^{k_2}\),如果左边赋\({1,3}\)且点数为\(k_1\),右…
Destroying The Graph Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8198   Accepted: 2635   Special Judge Description Alice and Bob play the following game. First, Alice draws some directed graph with N vertices and M arcs. After that B…
Playing with Superglue 题目连接: http://codeforces.com/problemset/problem/176/C Description Two players play a game. The game is played on a rectangular board with n × m squares. At the beginning of the game two different squares of the board have two ch…
题目链接: http://codeforces.com/problemset/problem/173/B 题意: 给你一个n*m的地图,现在有一束激光从左上角往左边射出,每遇到‘#’,你可以选择光线往四个方向射出,或者什么都不做,问最少需要多少个‘#’往四个方向射出才能使关系在n行往右边射出. 题解: 以行和列建二分图,如果str[i][j]=='#',则从i节点到j节点建一条双向边,权值都为1.然后对二分图跑一遍最短路. 代码: #include<iostream> #include<…
Greg and Graph time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Greg has a weighed directed graph, consisting of n vertices. In this graph any pair of distinct vertices has an edge between…
传送门:https://codeforces.com/gym/100801 题意: 给你一个DAG图,你最多可以进行k次操作,每次操作可以连一条有向边,问你经过连边操作后最小拓扑序的最大值是多少 题解: 最小拓扑序:与普通拓扑序不同的是,用一个小根堆记录入度为0的点做拓扑排序即可 怎么样使得最小拓扑序最大呢?已知拓扑序是入度小的点在前面,那么,如果我们可以使得大的点的度数尽量小或者是小的点度数尽量大就可以使得拓扑序变大了,由于我们只有加边的操作,那么我们可以将边尽量从大的点往小的点去连边 我们定…
Description You are given undirected weighted graph. Find the length of the shortest cycle which starts from the vertex 1 and passes throught all the edges at least once. Graph may contain multiply edges between a pair of vertices and loops (edges fr…
题意 有一个图, 两种操作,一种是删除某点的所有出边,一种是删除某点的所有入边,各个点的不同操作分别有一个花费,现在我们想把这个图的边都删除掉,需要的最小花费是多少. 思路 很明显的二分图最小点权覆盖集.WA在输出最小割方案上. [输出最小割方案]从源点S做一次DFS遍历,标记所有访问到的点,这些点就是S点集.然后对于每一条满流边,如果其两端点一个在S点集一个不在则该边就是此方案下的最小割边. 代码 [cpp] #include <iostream> #include <cstdio&g…
http://www.codeforces.com/problemset/problem/459/E 题意: 给出n个点,m条边的有向图,每个边有边权,求一条最长的边权上升的路径的长度. 思路:用f存边,g存点,然后排序转移,注意相同的要延迟转移 #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<iostream> struct edge…
并查集.... E. Information Graph time limit per test 1 second memory limit per test 512 megabytes input standard input output standard output There are n employees working in company "X" (let's number them from 1 to n for convenience). Initially the…
转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud  Bubble Sort Graph Iahub recently has learned Bubble Sort, an algorithm that is used to sort a permutation with n elements a1, a2, ..., an in ascending order. He is bored of this so simple al…
思路来源:http://blog.csdn.net/lenleaves/article/details/7873441 求最小点权覆盖,同样求一个最小割,但是要求出割去了那些边, 只要用最终的剩余网络进行一次遍历就可以了,比较简单. 建图:同样是一个二分图,左边的点代表去掉出边, 右边的点代表去掉入边(小心别弄混),左边去掉出边的点与源点相连, 容量为wi- . 然后更据给出的弧进行连线,权值为INF   使用很好理解的EK算法:(360MS) //#pragma comment(linker,…
这本来一个挺简单的题呢,结果让我给想复杂了,二分图就是把图分成了两部分,然后不同颜色各一边,肯定是满足题目中说的边和点的条件的,真是犯二了.. 代码如下: #include<iostream> #include<cstring> #include<cstdio> #include<vector> #include<queue> #include<map> using namespace std; #define N 100010 ve…
POJ2125 题意简述:给定一个有向图,要通过某些操作删除所有的边,每一次操作可以选择任意一个节点删除由其出发的所有边或者通向它的所有边,两个方向有不同的权值.问最小权值和的解决方案,要输出操作. 乍一看是要用点去覆盖边,联想到二分图的最小点权覆盖,通过拆点,我们可以得到二分图.每个点都拆成两个点,一个作为入点,另一个作为出点.于是我们构建了一个标准的二分图最小点权覆盖的模型 解决二分图最小点权覆盖的的算法并不复杂,创造一个源点和汇点,源点到左边的点连边,容量为对应点的权值,同理右边的点向汇点…
题目链接:Playing Piano 题意:给定长度为n的序列$a_i$,要求得到同样长度的序列$b_i$.满足一下条件: if $a_i < a_{i+1}$ then $b_i < b_{i+1}$ if $a_i > a_{i+1}$ then $b_i > b_{i+1}$ if $a_i = a_{i+1}$ then $b_i \neq\ b_{i+1}$ $1 <= b_i <= 5$ 题解:第一个数从1-5枚举,接着从下一位开始搜索,dp[i][j]表示…
题意: 让你选一些边,选边的前提是端点都被选了,求所有的边集中,边权和-点权和最大的一个. 题解: 对于每个边建一个点,然后就是裸的最大权闭合子图, 结果比赛的时候我的板子太丑,一直T,(不会当前弧优化...) 当时补题用的是蔡队的Dinic当前弧优化板子 今天重写了一遍 #include <bits/stdc++.h> #define endl '\n' #define ll long long #define all(x) x.begin(),x.end() #define IO ios:…
原文链接https://www.cnblogs.com/zhouzhendong/p/CF715B.html 题解 接下来说的“边”都指代“边权未知的边”. 将所有边都设为 L+1,如果dis(S,T) < L ,那么必然无解. 将所有边都设为 1 ,如果 dis(S,T) > L ,那么必然无解. 考虑将任意一条边的权值+1,则 dis(S,T) 会 +0 或者 +1 . 如果将所有边按照某一个顺序不断+1,直到所有边的权值都是L+1了,那么在这个过程中,dis(S,T) 是递增的,而且一定…
原文链接https://www.cnblogs.com/zhouzhendong/p/CF1009G.html 题目传送门 - CF1009G 题意 给定一个长度为 $n$ 的字符串 $s$ .并给定 $m$ 条限制,第 $i$ 条限制声明了第 $i$ 个位置的字符可以取的值.如果没有声明表示可以任意取值. 求一个字符串 $s$ 的排列,在满足 $m$ 条限制的同时,使得字典序最小.如果不存在满足限制条件的字符串,则输出 $-1$. $n,m\leq 10^5$,字符集 $ = \{'a','b…
F - AND Graph 思路: 首先,x & (~x) == 0 其次,~x 的 子集 y = ((~x) ^ (1<<k)), 0<= k < n(如果k这一位是1),y&x == 0 所以枚举 a[i] ,如果a[i]每被标记,搜索 (~a[i])的子集, 子集的子集......,边搜索边标记元素,如果出现一个y也属于a[i],那么再搜索(~y)的子集 这样就能保证一个联通图里的元素都能在一次搜索里被标记完 代码: #include<bits/stdc…
Description You are given a directed graph consisting of \(n\) vertices and \(m\) edges (each edge is directed, so it can be traversed in only one direction). You are allowed to remove at most one edge from it. Can you make this graph acyclic by remo…
E. Pashmak and Graph time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Pashmak's homework is a problem about graphs. Although he always tries to do his homework completely, he can't solve thi…
Long time ago, there was a great kingdom and it was being ruled by The Great Arya and Pari The Great. These two had some problems about the numbers they like, so they decided to divide the great kingdom between themselves. The great kingdom consisted…
题意:给定上一个n*m的矩阵,你从(1,1)这个位置发出水平向的光,碰到#可以选择四个方向同时发光,或者直接穿过去, 问你用最少的#使得光能够到达 (n,m)并且方向水平向右. 析:很明显的一个最短路,但是矩阵有点大啊.1000*1000,普通的肯定要超时啊,所以先通过#把该该图的行和列建立成二分图, 然后再跑最短路,这样就简单多了. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <c…