hdu5285-wyh2000 and pupil-(染色法二分图判定)
时间:2019-08-06
本文章向大家介绍hdu5285-wyh2000 and pupil-(染色法二分图判定),主要包括hdu5285-wyh2000 and pupil-(染色法二分图判定)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
http://acm.hdu.edu.cn/showproblem.php?pid=5285
题意:把互不认识的人分到两个组,第一组人数尽可能多。
题解:把互不认识的人连起来,当作二分图,二分图可能有多个,对于没有连线的点,扔到第一个图里。二色法对每个二分图染色,记录每个图比较多的颜色的数量累计到答案里。
特判坑:n<=1 或者 m==0
#include<stdio.h> #include<iostream> #include<algorithm> #include<cstring> #include<math.h> #include<string> #include<map> #include<queue> #include<stack> #include<set> #define ll long long #define inf 0x3f3f3f3f using namespace std; int n,m; vector<int>a[100005]; int color[100005]; int zero,one; int minn,maxx; bool flag; void bfs(int x) { queue<int>que;///对x点进行广搜,二色法,一个标记为0,另一个标记为1 zero=one=0; zero++; que.push(x); color[x]=0; while(!que.empty()&&flag) { int now=que.front(); que.pop(); int c=color[now]; int len=a[now].size(); for(int i=0;i<len;i++) { int next=a[now][i]; if(color[next]==-1)///如果没有被染色过, { que.push(next); if(c==0) color[next]=1,one++; else color[next]=0,zero++; } else ///被染色过 { if( color[next]==c ) { flag=false; break; } } } } } int main()//hdu5285 { int t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) a[i].clear(); memset(color,-1,sizeof(color)); minn=maxx=0; flag=true; if(n<=1) { printf("Poor wyh\n"); continue; } if(m==0)///特判,否则全部染成0色 { printf("%d 1\n",n-1); continue; } while(m--) { int u,v; scanf("%d%d",&u,&v); a[u].push_back(v); a[v].push_back(u); } int no=0;///没有被染色的点,其中第一组尽量多,则把没有染色的加到多的那一边去 for(int i=1;i<=n && flag;i++) { if(color[i]==-1 && a[i].size() )///没有被染色的点 并且 不是独立的 { bfs(i); if(zero<one) swap(zero,one); maxx+=zero; minn+=one; } else if(color[i]==-1 && a[i].size()==0)///独立的点染成颜色0,0是第一组,较多的那一组 { color[i]=0; maxx++; } } if(flag) printf("%d %d\n",maxx,minn); else printf("Poor wyh\n"); } return 0; }
原文地址:https://www.cnblogs.com/shoulinniao/p/11311256.html
- Spring Boot配置文件放在jar外部
- CSS引入方式
- Scrapy爬虫轻松抓取网站数据(以bbs为例,提供源码)
- CSS3实现loading图
- Netty断线重连
- 使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南
- gitbook安装与使用,并使用docker部署
- 【专业技术】在C/C++程序中打印当前函数调用栈
- 关于定位position的相关知识
- Docker+Jenkins持续集成环境(1)使用Docker搭建Jenkins+Docker持续集成环境
- 段落首字下沉
- 【编程基础】C语言指针、引用和取值
- Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目
- JavaScript中的this详解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法