染色法判定是不是二分图,如果是二分图,每个相邻的点都可以染成不相同的颜色,如果存在有两个点相邻并且颜色相同,则构不成二分图。这题构成二分图有很多种情况,贪心的选择使得第一组的人数最多就行。注意如果第二组人数至少要为一。

wyh2000 and pupil

Accepts: 93
Submissions: 925
Time Limit: 3000/1500 MS (Java/Others)
Memory Limit: 131072/65536 K (Java/Others)

问题描述
青年理论计算机科学家wyh2000在教导他的小学生。
共有n个小学生,编号为1−n。为了增加小学生之间的凝聚力,wyh2000决定将所有小学生分成2组,每组都至少有1个人。
但是有些小学生之间并不认识,而且如果a不认识b,那么b也不认识a。
Wyh2000希望每组中的小学生都互相认识。而且第一组的人要尽可能多。
请你帮wyh2000求出第一组和第二组的人数是多少。如果找不到分组方案,则输出"Poor wyh"。
输入描述
第一行一个数T,表示数据组数。
对于每组数据,第一行两个数n,m,表示小学生数量和互相不认识的小学生的数量。
接下来m行,每行两个数x,y(x<y),表示x不认识y,y不认识x。保证一对(x,y)只会出现一次。
T≤10,0≤n,m≤100000
输出描述
对于每组数据,输出答案。
输入样例
2
8 5
3 4
5 6
1 2
5 8
3 5
5 4
2 3
4 5
3 4
2 4
输出样例
5 3
Poor wyh

代码是参照了别人的。

#include<map>
#include<vector>
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<stack>
#include<queue>
#include<set>
#define inf 0x3f3f3f3f
#define mem(a,x) memset(a,x,sizeof(a))using namespace std;typedef long long ll;
typedef pair<int,int> pii;inline int in()
{int res=0;char c;while((c=getchar())<'0' || c>'9');while(c>='0' && c<='9')res=res*10+c-'0',c=getchar();return res;
}vector<int> v[100010];
int color[100010];
bool flag=1;int a[2];           //a数组代表每次染色分成两组的人数
int ans1,ans2;
void dfs(int x)
{a[color[x]-1]++;                    //如果color[x]是颜色1,则第一组人数加一,如果是颜色二,第二组人数加一for(int i=0;i<(int)v[x].size();i++){int t=v[x][i];if(color[t]==0){color[t]=(3-color[x]);   //当前颜色取跟上一个颜色相反的颜色dfs(t);                  //从前点在进行染色}else if(color[t]==color[x]){flag=0;                  //如果存在当前颜色与前面相邻颜色一样,则不能构成二分图}}
}
int main()
{int T=in();while(T--){int n=in(),m=in();int t1,t2;ans1=0,ans2=0;for(int i=0;i<=n;i++){v[i].clear();}mem(color,0);flag=1;   //注意每次初始化for(int i=0;i<m;i++){t1=in(),t2=in();v[t1].push_back(t2);v[t2].push_back(t1);}if(n<2){puts("Poor wyh");continue;}int ans=0;for(int i=1;i<=n;i++){if(!color[i]){a[0]=a[1]=0;color[i]=1;dfs(i);ans += max(a[0],a[1]);//贪心的取最大的一组}}if(flag){if(ans==n)ans--;printf("%d %d\n",ans,n-ans);}else puts("Poor wyh");}return 0;
}

hdu 5285 wyh2000 and pupil 二分图染色发判定,求最大匹配相关推荐

  1. hdu 2444(二分图的判断以及求最大匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2444思路:首先要判断能否构成二分图,用bfs对当前点u染色,对u的邻接点v的颜色进行判断,如果为染色, ...

  2. 【HDU - 2444】The Accomodation of Students(二分图判断 + 匈牙利算法求最大匹配)

    题干: There are a group of students. Some of them may know each other, while others don't. For example ...

  3. P1155 双栈排序(二分图染色)

    P1155 双栈排序(二分图染色) 题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一 ...

  4. 【hdu5285】wyh2000 and pupil

    今天下午的二分图染色给我开启新世界的大门啊2333333 这个题要比刚才的关押罪犯简单,只需要染一遍色就能求出答案 #include<iostream> #include<cstri ...

  5. LOJ P1155 双栈排序 二分图染色 图论

    https://www.luogu.org/problem/show?pid=P1155 题解: https://www.byvoid.com/zhs/blog/noip2008-twostack 开 ...

  6. Relation(NOIP模拟赛)(二分图染色)

    原题: Description 有n个人,编号为1àn,告诉你那些人之间是不友好的.现在,让你将这n个人分成两组,使得每一组之内的人是互相友好的,如果可以分成两组,则输出如何分组的,如果不可以分成两组 ...

  7. 【POJ 2942】Knights of the Round Table(点双连通分量,二分图染色)

    圆桌会议必须满足:奇数个人参与,相邻的不能是敌人(敌人关系是无向边). 求无论如何都不能参加会议的骑士个数.只需求哪些骑士是可以参加的. 我们求原图的补图:只要不是敌人的两个人就连边. 在补图的一个奇 ...

  8. uva 11080(二分图染色)

    题意:一个国王要派若干士兵看守王国.王国是一张无向图,然后士兵只能站在点上.每个士兵的看守范围是临近的点与边,士兵看管的的边不能重复.问最少用多少个士兵能使每个点和边都有人看守. 思路:这道题可以抽象 ...

  9. Codeforces Round #742 (Div. 2) F. One-Four Overload 构造 + 二分图染色

    传送门 文章目录 题意: 思路: 题意: 给你一个n∗mn*mn∗m的矩形,包含...和XXX,你有两种颜色,你需要给...染色使得每个XXX上下左右相邻的...其两种颜色个数相同,输出一种合法方案. ...

  10. 【Hitachi2020C】ThREE【构造】【二分图染色】

    传送门 题意:给一棵nnn个结点的树,构造一个nnn阶排列ppp,使得所有距离为333的点对(i,j)(i,j)(i,j)满足pi+pjp_i+p_jpi​+pj​和pipjp_ip_jpi​pj​至 ...

最新文章

  1. 服务器架设笔记——搭建用户注册和验证功能
  2. Robot Christmas!机器人玩转圣诞节!
  3. hh.exe的另类用法
  4. [C++] 指向常量的指针 VS 指针类型的常量
  5. 兰州谋定百合品牌-农业大健康·万祥军:功能性农业产业脱贫
  6. jq php异步上传图片,PHP+Ajax实现图片异步上传预览
  7. ?: (staticfiles.E002) The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting.
  8. html5块元素代码,html5 区块与内联div 与span html块级元素(示例代码)
  9. Jquery获得服务器控件的方法
  10. STM32驱动SG90舵机
  11. UWP 如何访问本地代理
  12. InstallShield Slient Uninstall
  13. 今日总结-20220304
  14. 使用Python爬出王者荣耀高清皮肤图片
  15. WPF工控组态软件之温度计
  16. 【嵌入式】基于平头哥内核的W801 WIFI SoC的OTA方案设计
  17. 2.手电筒原理、手电筒原理应用:拐弯通信以及电报机
  18. 使用Python评估一支股票的价格
  19. SQLServer Stuff函数的用法
  20. 如何搭建一套免费开源的微信群机器人问答系统?

热门文章

  1. SQL注入-waf绕过
  2. c语言 模拟memcmp
  3. Python中的切片(详细篇)学起来喔
  4. matlab 均生函数,Matlab 的fspecial函数用法
  5. css fixed定位失效问题
  6. 一文读懂自然语言处理NLP (简单详细的综述)
  7. 深入理解Guava的异步回调模式
  8. 解决Win10下安装Winpcap失败
  9. 你要问我应用层?我就和你扯扯扯
  10. prisma orm_使用Prisma和React构建RECIPE应用