COJ 0578 4019二分图判定

4019二分图判定
难度级别: B; 编程语言:不限;运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B

试题描述

给定一个具有n个顶点(顶点编号为0,1,……,n-1)的图,要给图上每个顶点染色,并且要使相邻的顶点颜色不同。问是否能最多用2种颜色进行染色?测试数据保证没有重边和自环。


输入

第一行包括两个数n和k,分别表示图的顶点数和边数,接下来有k行,每行有两个整数m1和m2,表示顶点m1和m2间有一条无向边。各行的整数间用一个空格分隔。

输出

如果能就输出1,否则输出0.

输入示例

3 3
0 1
0 2
1 2

输出示例

0

其他说明

数据范围:1<=n<=1000,发现猜答案的刷题就封号。

题解:染个色。我记得可以用LCT动态维护二分图可惜我忘了QAQ。。。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<queue>
 6 #include<cstring>
 7 #define PAU putchar(‘ ‘)
 8 #define ENT putchar(‘\n‘)
 9 using namespace std;
10 const int maxn=1000+10,inf=-1u>>1;
11 struct ted{int x,y;ted*nxt;}adj[maxn<<1],*fch[maxn],*ms=adj;
12 void add(int x,int y){
13     *ms=(ted){x,y,fch[x]};fch[x]=ms++;*ms=(ted){y,x,fch[y]};fch[y]=ms++;return;
14 }
15 bool col[maxn];
16 bool color(int x){
17     for(ted*e=fch[x];e;e=e->nxt){
18         int v=e->y;
19         if(!col[v]){col[v]=!col[x];if(!color(v))return false;}
20         else if(col[v]==col[x])return false;
21     }return true;
22 }
23 inline int read(){
24     int x=0,sig=1;char ch=getchar();
25     for(;!isdigit(ch);ch=getchar())if(ch==‘-‘)sig=0;
26     for(;isdigit(ch);ch=getchar())x=10*x+ch-‘0‘;
27     return sig?x:-x;
28 }
29 inline void write(int x){
30     if(x==0){putchar(‘0‘);return;}if(x<0)putchar(‘-‘),x=-x;
31     int len=0,buf[15];while(x)buf[len++]=x%10,x/=10;
32     for(int i=len-1;i>=0;i--)putchar(buf[i]+‘0‘);return;
33 }
34 int n,m;
35 void init(){
36     n=read();m=read();
37     for(int i=1;i<=m;i++)add(read(),read());
38     return;
39 }
40 void work(){
41     col[0]=1;puts(color(0)?"1":"0");
42     return;
43 }
44 void print(){
45     return;
46 }
47 int main(){init();work();print();return 0;}
时间: 2024-10-19 11:26:07

COJ 0578 4019二分图判定的相关文章

hdu 5285 wyh2000 and pupil(二分图判定)

对每两个不认识的人连一条边,则此题可转化为二分图判定(二分图可有多个). 如果有一部分图判定为不是二分图,则输出“Poor wyh”. 否则,分别累加每个二分图的最多的颜色数. #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <string> #include <stack> #include <cmat

二分图判定 nyoj1015(模板)

题目:点击打开链接nyoj1015 分析:题意很清楚,就是让判断一个图是不是二分图,思路当然就是染色法,首先给一个顶点然色,然后与它相邻的顶点全部染相反的颜色,如果过程中发现要染的点已经染色了,而且是和现在点相同的颜色的话,那么就说明不是一个二分图. 其实就是广搜模板 #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <vector&g

UVA 11080 - Place the Guards(二分图判定)

UVA 11080 - Place the Guards 题目链接 题意:一些城市.之间有道路相连,如今要安放警卫,警卫能看守到当前点周围的边,一条边仅仅能有一个警卫看守,问是否有方案,假设有最少放几个警卫 思路:二分图判定,判定过程记录下白点和黑点个数,小的就是要安放的个数,注意假设是0,那么应该是加1 代码: #include <cstdio> #include <cstring> #include <vector> using namespace std; con

二分图判定【图的搜索】

二分图判定 给定一个图,要给图上每个顶点染色,并且要使得相邻的顶点颜色不同.问是否能最多用2种颜色进行染色? 参考如下: Source Code: #include <iostream> #include <vector> using namespace std; vector<int> Edge[1010]; int colorArr[1010]; void initColorArr(int length){ for(int i=0;i<=length;++i)

HDU 2444 The Accomodation of Students(二分图判定+最大匹配)

Problem Description There are a group of students. Some of them may know each other, while others don't. For example, A and B know each other, B and C know each other. But this may not imply that A and C know each other. Now you are given all pairs o

编程算法 - 二分图判定 代码(C)

二分图判定 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 给定一个具有n个顶点的图. 要给图上每个顶点染色, 并且要使相邻的顶点颜色不同.  是否能最多用2种颜色进行染色. 没有重边和闭环. 即二分图问题. 使用深度优先搜索(dfs), 把顶点染成c, 然后相邻边染成-c. 如果相邻边被染色过, 且相同, 则图不是二分图; 如果所有边都被染色, 并且互不相同, 则是二分图. 进行多次搜索, 避免非连通图. 代码: /* * CppPrim

HDU 2444 The Accomodation of Students 二分图判定+最大匹配

题目来源:HDU 2444 The Accomodation of Students 题意:n个人是否可以分成2组 每组的人不能相互认识 就是二分图判定 可以分成2组 每组选一个2个人认识可以去一个双人间 最多可以有几组 思路:二分图判定+最大匹配 #include <cstdio> #include <cstring> #include <vector> using namespace std; const int maxn = 550; int vis[maxn];

图的搜索---二分图判定

/** 二分图判定 图的着色问题,最小着色数为二的图 DFS */ #include "cstdio" #include "cstring" #include "cstdlib" #include "vector" #define MAX 1002 std::vector<int> G[MAX]; int color[MAX]; int n; bool dfs(int x,int c) { color[x]=c;

HDU2444(二分图判定+最大匹配)

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