Bicoloring UVA - 10004 二分图判断】的更多相关文章

\(\color{#0066ff}{题目描述}\) 多组数据,n=0结束,每次一个n,m,之后是边,问你是不是二分图 \(\color{#0066ff}{输入样例}\) 3 3 0 1 1 2 2 0 3 2 0 1 1 2 9 8 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 \(\color{#0066ff}{输出样例}\) NOT BICOLORABLE. BICOLORABLE. BICOLORABLE. \(\color{#0066ff}{题解}\) 二分图染色法…
d.给定一个图,判断是不是二分图. s.可以交叉染色,就是二分图:否则,不是. 另外,此题中的图是强连通图,即任意两点可达,从而dfs方法从一个点出发就能遍历整个图了. 如果不能保证从一个点出发可以遍历整个图,那么编程要注意了,应该从每个点出发遍历一次. s2.带权并查集来判断,略复杂.先略过.先上个博客:http://blog.csdn.net/zsc09_leaf/article/details/6727622 c.邻接矩阵,bfs #include<iostream> #include&…
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=12&page=show_problem&problem=945 Problem:In 1976 the ``Four Color Map Theorem" was proven with the assistance of a computer. This theorem states that e…
这道题要我们判断所给图是否可以用两种颜色进行染色,即"二染色“.已知所给图一定是强连通图. 分析之: 若图中无回路,则该图是一棵树,一定可以二染色. 若图中有回路,但回路有偶数个节点,仍然可以二染色. 仅当图中存在回路且回路有奇数个节点时,不能二染色. 具体实现细节我在代码中给出了详细的注释,我的解题代码如下: /* 关键在于:当且仅当存在奇回路时,无法二染色 */ #include <iostream> #include <cstdio> #include <cs…
Description In the ``Four Color Map Theorem" was proven with the assistance of a computer. This theorem states that every map can be colored using only four colors, in such a way that no region is colored using the same color as a neighbor region. He…
题意: 给N个点构成的无环无向图,并且保证所有点对都是连通的. 给每个点染色,要么染成黑要么染成白.问是否存在染色方案使得所有有边相连的点对颜色一定不一样. 是输出 BICOLORABLE 否则输出 NOT BICOLORABLE 思路: 从某点开始,直接进行染色,如果矛盾,返回false. 代码: int n,l; vector<int> graph[205]; int color[205]; bool dfs(int u,int fa){ if(color[fa]==0) color[u]…
和以前做过的一个二分图颇为相似,以前的是互相不认识的放在一组,这个是互相认识的,本质上是相同的 是 hdu 2444 #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<queue> #include<map> using namespace std; typedef long…
题意:有n个学生,有m对人是认识的,每一对认识的人能分到一间房,问能否把n个学生分成两部分,每部分内的学生互不认识,而两部分之间的学生认识.如果可以分成两部分,就算出房间最多需要多少间,否则就输出No. 首先判断是否为二分图,然后判断最大匹配 Sample Input 4 4 1 2 1 3 1 4 2 3 6 5 1 2 1 3 1 4 2 5 3 6Sample Output No 3 #include<iostream> #include<string.h> #include…
http://acm.hdu.edu.cn/showproblem.php?pid=2444 The Accomodation of Students Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 2444 Description There are a group of students. Some of them may know…
Problem UVA1627-Team them up! Total Submissions:1228  Solved:139 Time Limit: 3000 mSec Problem Description Your task is to divide a number of persons into two teams, in such a way, that: • everyone belongs to one of the teams; • every team has at lea…
链接 [https://vjudge.net/contest/281085#problem/C] 题意 一个n个点,m条边的图,开始的点是s 每次必须移动到相邻的位置,问你是否存在某个时刻所有点都可能到达 分析 图的话用邻接表vectorc存,这个非常实用 首先,如果一个图不是联通的话就不可能存在 其次,如果一个图是二分图的话就不可能存在,因为二分图某一时刻只能在两个点集之一 画图就知道了,其他绝对是可以的,自己画图就会发现了,我也是看了别人的才知道这个套路 经验收获啊! 1.并查集判断是否联通…
<题目链接> 题目大意: 有N个人,M组互相认识关系互相认识的两人分别为a,b,将所有人划分为两组,使同一组内任何两人互不认识,之后将两个组中互相认识的人安排在一个房间,如果出现单人的情况则不安排房间.输出最大需要安排房间的数量. 解题分析:其实题意就是叫我们先判断该图是否为二分图,如果是的话,给出它的最大匹配.判断是否是二分图,我们可以用BFS或DFS对每个节点进行染色,有直接认识关系的人染成不同颜色,判断再染色的过程中是否发生冲突.最后再用匈牙利求出最大匹配. #include <c…
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2444 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description There are a group of students. Some of them may know each other, while others don't. For ex…
http://blog.csdn.net/lyy289065406/article/details/6756821 http://www.cnblogs.com/wuyiqi/archive/2011/10/19/2217911.html #include "stdio.h" #include "string.h" #define N 1010 int time; int n,m; bool map[N][N]; struct node { int x,y; //i…
题意:给定一个Y行X列的网格,网格种有重要位置和障碍物.要求用最少的机器人看守所有重要的位置,每个机器人放在一个格子里,面朝上下左右四个方向之一发出激光直到射到障碍物为止,沿途都是看守范围.机器人不会阻挡射线. “#”表示障碍物,“*”表示重要的位置,箭头表示最终机器人匹配的位置,求出机器人能够匹配出的最少位置个数. 分析:首先看题解是二分图匹配,但是建图目前还没想到呢.每个机器人绝对都在重要位置上,假设每个重要位置上都有机器人,可以保护哪几个重要物品.看是否能够匹配得来 #include<cs…
题意: 给出一个有向带权图,找到若干个圈,使得每个点恰好属于一个圈.而且这些圈所有边的权值之和最小. 分析: 每个点恰好属于一个有向圈 就等价于 每个点都有唯一后继. 所以把每个点i拆成两个点,Xi 和 Yi ,然后求二分图最小权完美匹配(流量为n也就是满载时,就是完美匹配). #include <bits/stdc++.h> using namespace std; + ; ; struct Edge { int from, to, cap, flow, cost; Edge(int u,…
题意: 有n个插座,m个设备以及k种转化器(每种转化器视为有无限个). 转换器A->B可以将A类型的插头转化成B类型的插头,所以可以插在B类型的插座上. 求最少剩多少不匹配的设备. 分析: 抛开转换器不讲,插头插在插座上就是一个最大二分图匹配. 可以用最大流的算法,增加一个连接每个插头的源点s和连接每个插座的汇点t,每条弧容量都为1. 然后求最大流量,就是二分图的最大基数匹配. 既然有了转换器,一种插头可以用转换器转换成多种类型的插头,所以可以Floyd一次,求出每种插头可以转换成的所有的插头类…
这个承认自己没看懂题目,一开始以为题意是形成环路之后走一圈不会产生负值就输出,原来就是判断负环,用SPFA很好用,运用队列,在判断负环的时候,用一个数组专门保存某个点的访问次数,超过了N次即可断定有负环(其实我觉得=N次了就可以断定了,当然这样是保险起见)....别人还有用SPFA+DFS做的,还效率相当高,我还没怎么弄明白是怎么回事...还有,我突然想到讲最短路的时候说迪杰斯特拉不能用于有负权的图,这是为什么..我还没想明白,先去睡觉吧.... 关于dijstla为什么不能有负权,昨晚躺下之后…
模板题,注意输出 #include <stdio.h> #include <string.h> #include <algorithm> #include <math.h> #include <vector> #include <stack> using namespace std; typedef long long LL; ; int head[N],tot,n; struct Edge{ int v,next; }edge[N*…
鉴于网上讲交叉染色的资料比较少,于是我把我自己的心得与方法贴出来,方便与大家共同进步. 二分图: 百度百科传送门 wiki百科传送门 判断一个图是否为二分图可以用交叉染色的方法来判断,可以用BFS,也可以用DFS,这里我用使用DFS来实现. 思路: 任意取一个点进行染色,如果发现要涂某一块时这个块已经被涂了色,并且与我们要使用的颜色不同的话,就说明这个图不能被染成BICOLORABLE的. (1)如果没有染色,将它染色,并将它周围的点变成相反色. (2)如果已经染色,判断是否与现在染色的点的颜色…
/* 思维难度几乎没有, 就是线段树分治check二分图 判断是否为二分图可以通过维护lct看看是否链接出奇环 然后发现不用lct, 并查集维护奇偶性即可 但是复杂度明明一样哈 */ #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #include<iostream> #define f1 first #define f2 second #define…
[学时·III] 二分图 ■基本策略■ 其实本质是图论中的网络流 二分图是两个由多个点组成的集合(上部和下部,且没有重叠),两个集合中的点不与该集合内其他的点连通,但和另一个集合内的点连通.我们称这两个集合为上部.下部,或X.Y部,比如: 判定 我们可以通过染色的方法将一个普通的连通图转换为二分图(如果不是连通图,则说明该图存在多个二分图或不为二分图).由于X部只与Y部相连,Y部也只与X部相连,我们可以把X.Y部染成不同的颜色.通过BFS(DFS也可以)从图里的一个点开始,假设它为X部,则与它相…
一道很巧妙的二分图的题目 简单分析性质可知,一个合法序列一定是由12,21这样的子串构成的,所以相邻的每隔2个两两配对 然后BF和GF互相配对,思考一下,如果存在奇环,那么必定有一个BG有两个GF,或者一个GF有两个BF,所以不存在这种情况,一定有解 直接二分图判断即可 #include <iostream> #include <cstdio> #include <vector> #define mp make_pair #define fi first #define…
The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4250    Accepted Submission(s): 1946 Problem Description There are a group of students. Some of them may know each ot…
C. NP-Hard Problem time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Recently, Pari and Arya did some research about NP-Hard problems and they found the minimum vertex cover problem very int…
双栈排序 题目链接:https://www.luogu.org/problem/P1155 数据范围:略. 题解: 神仙题. 就第一步就够劝退了. 这个二分图非常不容易,首先只有两个栈,不是属于一个就是属于另一个,我们用二分图判断冲突. 然后不能模拟,我们就贪心的bfs就行了,这一步很鬼畜啊....…
D - Beautiful Graph CodeForces - 1093D You are given an undirected unweighted graph consisting of nn vertices and mm edges. You have to write a number on each vertex of the graph. Each number should be 11, 22or 33. The graph becomes beautiful if for…
题意: 有一堆的学生关系,要将他们先分成两个组,同组的人都不互不认识,如果不能分2组,输出No.若能,则继续.在两组中挑两个认识的人(每组各1人)到一个双人房.输出需要多少个双人房? 思路: 先判定是否为二分图,可以用黑白着色法(DFS或BFS都行).若是二分图,再进行匹配,用匈牙利算法,注:给的是整个图,没有区分男女,用邻接表比较好. #include <bits/stdc++.h> #define LL long long using namespace std; ; vector<…
uva124:http://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=60题意:  第一行给出字符串(小写字母),表示出现的字符类型第二行是约束关系,a1 b1 a2 b2 a3 b3.....ai bi,表示ai必须在bi前面按照字典序输出所有满足约束条件的序列 题解:题解:由题意会想到用拓扑排序,但是题目要求是字典序输出,所以可以用dfs来处理. #include<algo…
思路: 二分图判断+最大匹配模板 二分图判断的方法很好想,没有离散的基础凭空给你个图让你判断也很容易想到染色法,简单的介绍下就是用queue来做,标记一个点为x则他所有的邻点都为x',然后递归的执行下去. 接下来会面临一个比较有趣的问题,我们确定现在的图是二分图,然后我们要求它的最大匹配——这里涉及到一个很关键的问题,就是一个图我们说他自己是一个二分图,那么是他内部的一些点会分成两部分,分别写成两列变成了形式上的二分图.而我们用find求二分图的时候是分别写成两列的话是一个图的所有点,因此总数最…