hdu5385 wyh2000 and pupil 二分图
B.wyh2000 and pupil
题意是将彼此不认识的人分两组,第一组尽可能人数最多,并且每组至少有一个人,如果不能分成两组则输出”Poor wyh”
这个是二分图,将人分成两组,首先构成图,如
G[1]={ 2 3 4 5},即1与2,3,4,5 不认识
1. 还未分组的先放到第group组,用dfs(i,group(1 or 2)),再枚举与i不认识的人
2.已分组的判断是否有冲突,还未分组则递归执行上一步骤,此时group=3-group
#include <cstdio>
#include <cstring>
#include <vector>
#include <iostream>
using namespace std;
const int N=100005;
int f[N]; //标记分组
int cnt[3]; //计算每组人数
vector<int>G[N]; //记录
bool dfs(int u,int gr) //dfs找增广路
{f[u]=gr; //标记组cnt[gr]++; for(int i=0;i<G[u].size();i++){ //枚举int v=G[u][i];if(f[v]!=-1){ //若已分组if(f[v]!=(3-gr)) return false;}else if(!dfs(v,3-gr)) return false; //未分组}return true;
}
void work(int n)
{int ans=0;int s1=0;int s2=0;memset(cnt,0,sizeof cnt);memset(f,-1,sizeof f);for(int i=1;i<=n;i++){int c1=cnt[1];int c2=cnt[2];if(f[i]<0){ //未分组if(!dfs(i,1)){puts("Poor wyh");return;}//printf("c1=%d c2=%d cnt1=%d cnt2=%d\n",c1,c2,cnt[1],cnt[2]);s1+=max(cnt[1]-c1,cnt[2]-c2); //将每次增加人数最多的加到s1s2+=min(cnt[1]-c1,cnt[2]-c2);// printf("s1=%d s2=%d\n",s1,s2);}}//ans=cnt[1]>cnt[2]?cnt[1]:cnt[2];if(s2==0) s1--,s2++;printf("%d %d\n",s1,s2);
}
int main()
{ int T;scanf("%d",&T);while(T--){int n,m;int x,y;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)G[i].clear();for(int i=0;i<m;i++){scanf("%d%d",&x,&y);G[x].push_back(y);G[y].push_back(x);}if(n<2){puts("Poor wyh");continue;}work(n);}return 0;
}
其实一开始觉得只要找到各个分组的人数就是了,后来发现并不是的
比如这一组:
2
6 4
1 2
1 3
2 4
4 5
正确应为:4 2
但如果只找各个组人数就是:3 3
模拟一下就知道了
hdu5385 wyh2000 and pupil 二分图相关推荐
- 【hdu5285】wyh2000 and pupil
今天下午的二分图染色给我开启新世界的大门啊2333333 这个题要比刚才的关押罪犯简单,只需要染一遍色就能求出答案 #include<iostream> #include<cstri ...
- POJ - 3041 Asteroids 二分图最小点覆盖
题目链接 二分图一个很重要的定理:看了很多大神的博客表示看不懂为什么,以后再看 最小点覆盖=最大匹配 最小点覆盖就是在二分图里边,选择一个点,将所有与该点相链接的边删去,问最小找多少个点能够把所有的边 ...
- P2172 [国家集训队]部落战争 二分图最小不相交路径覆盖
二分图最小不相交路径覆盖 #include<bits/stdc++.h> using namespace std; const int MAXN = 5550; const int MAX ...
- 图论:关于二分图的总结(转载)
二分图是这样一个图,它的顶点可以分类两个集合X和Y,所有的边关联在两个顶点中,恰好一个属于集合X,另一个属于集合Y. 最大匹配:图中包含边数最多的匹配称为图的最大匹配. 完美匹配:如果所有点都在匹配边 ...
- c语言最小费用流_策略算法工程师之路-图优化算法(一)(二分图amp;最小费用最大流)...
目录 1.图的基本定义 2.双边匹配问题 2.1 二分图基本概念 2.2 二分图最大匹配求解 2.3 二分图最优匹配求解 2.4 二分图最优匹配建模实例 2.4.1 二分图最优匹配在师生匹配中的应用 ...
- Dinic二分图匹配 || Luogu P3386
题面:[模板]二分图匹配 思路:Dinic实现二分图匹配,要建一个超级源点(S)和超级汇点(T),分别定为N+M+1和N+M+2 然后S去和N中的数建正边和反边,正边权值为1,反边权值为0:M中的数去 ...
- [THUWC2017]随机二分图
题目大意 给一张二分图,有左部点和右部点. 有三种边,第一种是直接从左部点连向右部点,出现概率为50%. 第二种边一组里有两条边,这两条边同时出现或者不出现,概率都是50%. 第三种边一组里有两条边, ...
- poj2289二分图多重匹配
题意:给你一张二分图,求右边点到汇点的最小容量(保证流量为n)是多少 题解:二分答案,每次重新建边跑最大流,看是不是为n就好了 #include<map> #include<set& ...
- BZOJ 4025 二分图
题目大意 给定一个\(n\)个点, \(m\)条边的无向图, 每条边在一定时间范围内存在. 要你判断每个时间点这张图是否为二分图. \(n \le 10^5\) \(m \le 2 \times 10 ...
- 二分图匹配匈牙利算法DFS实现
1 /*==================================================*\ 2 | 二分图匹配(匈牙利算法DFS 实现) 3 | INIT: g[][]邻接矩阵; ...
最新文章
- 有你认识的么?新鲜出炉!云+社区2020年度优秀讲师TOP作者榜单!
- VS2019 Android .so开发
- java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)...
- Validation of ViewState Mac failed exception
- linux 重定向 2gt;gt;,编写我自己的linux shell I / O重定向’gt;’函数
- 5g时代计算机网络过时,5g云电脑 取代主机(5g时代云电脑会普及吗)
- Quartz应用与集群原理分析
- CV 加持的工业检测,从算法选型到模型部署
- oracle单列索引和组合索引性能测试
- python中print后面加逗号
- AIO、NIO、BIO
- 蓝桥杯2016年第七届C/C++省赛B组第一题-煤球数目
- 2009年日全食观测方法
- Redis容量及使用规划(转)
- Nginx的安装、启动、停止命令
- 陶哲轩实分析 4.1 节习题试解
- Boost PFC参数计算——交流电的基本概念与推导
- Ubuntu Screen 后台启动程序安装与运行
- excel日期转换为周数_VBA将日期转换为周数
- 3U8633——雷达对民航的贡献