dfs染色法判定二分图】的更多相关文章

#include<iostream> #include<cstring> using namespace std; ][],color[],n; int dfs(int x,int c) { color[x]=c; ;i<=n;i++) { ) { if(color[i]==c) ; &&!dfs(i,-c)) ; } } ; } int main() { int T,m,x,flag,y,g; cin>>T; while(T--) { cin&g…
#include <cstring> #include <iostream> #include <algorithm> using namespace std; , M = ; int n, m; int h[N], e[M], ne[M], idx; int color[N]; void add(int a, int b) { e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ; } bool dfs(int u, int c) {…
#include<iostream> #include<queue> #include<cstring> #include<cstdio> using namespace std; ][],color[]; int n,m,k; int bfs(int x) { color[x]=; queue<int> que; que.push(x); while(!que.empty()) { int now=que.front(); que.pop();…
The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5225    Accepted Submission(s): 2374 Problem Description There are a group of students. Some of them may know each ot…
题目链接:https://cn.vjudge.net/contest/209473#problem/C 先谈一下二分图相关: 一个图是二分图的充分必要条件: 该图对应无向图的所有回路必定是偶环(构成该环形的边的数量为偶数).暂时不证明,后证. 那么怎么判断一个图的回路是奇环还是偶环呢? 交叉染色法. 随机选择一个点,染成红色,把所有跟它相邻的点染成绿色,再由被染色的绿点出发,把相邻的点染成红色…… 即对于一个点和他相邻的点(两个点之间有边相连叫做相邻),颜色必定不同,如果相同,那么是奇环. 例如…
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…
用染色法判断二分图是这样进行的,随便选择一个点, 1.把它染成黑色,然后将它相邻的点染成白色,然后入队列 2.出队列,与这个点相邻的点染成相反的颜色 根据二分图的特性,相同集合内的点颜色是相同的,即 但是如果这个图不是二分图,那么就会这样 把与1相邻的点2,3染成白色,然后入队列,然后2出队列,要把与2相邻的点2,3染成黑色,但是都染过了,所以不用染色 但是3的颜色应该与2相反(如果是二分图的话),可是没有相反,所以就不是二分图 #include <stdio.h> #include <…
Problem Description   This year is the 60th anniversary of NJUST, and to make the celebration more colorful, Tom200 is going to invite distinguished alumnus back to visit and take photos.   After carefully planning, Tom200 announced his activity plan…
一.dfs框架: vector<int>G[maxn]; //存图 int vis[maxn]; //节点访问标记 void dfs(int u) { vis[u] = ; PREVISIT(u); //访问节点u之前的操作 int d = G[u].size(); ; i < d; i++)//枚举每条边 { int v = G[u][i]; if(!vis[v])dfs(v); } POSTVISIT(u); //访问节点u之后的操作 } 二.无向图连通分量 void find_cc…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5971 题意:有n个人,编号为1-n, 已知X个人是good,Y个人是bad,m场比赛,每场比赛都有一个good和一个bad人结合起来,问这n个人是否能被分成两种人 其实就是判断是否为二分图,用染色法判断一下就可以了 #include <stdio.h> #include <string.h> #include <math.h> #include <algorithm&…