bzoj2184: 任意图的匹配
Description
每天都要考,每天都要讲,大家注意力都集中不起来了,每天听解题报告时都有人交头接耳(也包括我,呵呵)。这样做大大的影响的学习效率(可能吧)。于是,有些好奇心重的同学就开始研究,怎样才会最吵。培训的总共有N个人,但不是每两人之间都讲话,只有一些人有话题聊,而且一个人可能会和多个人有话题(共M对人)。如果所有同学都说在话,教室里最吵。你的任务就是求出把说话者对数控制在多少人以内,无论如何教室里不会变得最吵?注意:A和B说话,同时B和C说话,这算两对人说话。
Input
第一行两个整数N,M。接下来M行,每行两个整数x,y表示x和y有话题聊。
Output
一行,一个整数表示要把说话者对数控制在多少以内,无论如何教室里不最吵。
若有孤立点,则答案为M,否则设最少用k条边覆盖所有点,则答案为k-1
k=N-最大匹配
#include<bits/stdc++.h>
const int N=;
int es[N],enx[N],e0[N],ep,q[N],ql,qr,n,m,f[N],nx[N],pv[N],t[N],ts[N],tk=,ans=;
void ae(int a,int b){
es[ep]=b;enx[ep]=e0[a];e0[a]=ep++;
es[ep]=a;enx[ep]=e0[b];e0[b]=ep++;
}
int get(int x){return x!=f[x]?f[x]=get(f[x]):x;}
int lca(int x,int y){
++tk;
while(){
if(x){
x=get(x);
if(ts[x]==tk)return x;
ts[x]=tk;
x=pv[nx[x]];
}
std::swap(x,y);
}
}
void mg(int a,int b){
while(a!=b){
int w=nx[a],u=pv[w];
if(get(u)!=b)pv[u]=w;
if(t[a]==)t[q[++qr]=a]=;
if(t[w]==)t[q[++qr]=w]=;
if(a==f[a])f[a]=b;
if(w==f[w])f[w]=b;
a=u;
}
}
int bfs(int w0){
for(int i=;i<=n;++i)f[i]=i,pv[i]=,t[i]=;
ql=qr=;
q[++qr]=w0;
while(ql!=qr){
int w=q[++ql];
for(int i=e0[w];i;i=enx[i]){
int u=es[i];
if(u==nx[w]||get(w)==get(u)||t[u]==)continue;
if(t[u]==){
int v=lca(w,u);
if(get(w)!=v)pv[w]=u;
if(get(u)!=v)pv[u]=w;
mg(w,v);mg(u,v);
}else if(nx[u]){
pv[u]=w;
t[u]=;
t[q[++qr]=nx[u]]=;
}else{
while(w){
int a=nx[w];
nx[w]=u;nx[u]=w;
u=a;
w=pv[u];
}
return ;
}
}
}
return ;
}
int main(){
while(scanf("%d%d",&n,&m)==){
memset(e0,,sizeof(int)*(n+));
memset(nx,,sizeof(int)*(n+));
ep=;
for(int i=,a,b;i<=m;++i){
scanf("%d%d",&a,&b);
ae(a,b);
}
for(int i=;i<=n;++i)if(!e0[i]){
printf("%d\n",m);
goto o;
}
ans=;
for(int i=;i<=n;++i)if(!nx[i])ans+=bfs(i);
printf("%d\n",n-ans-);
o:;
}
return ;
}
bzoj2184: 任意图的匹配的更多相关文章
- Python正则表达式:最短匹配
最短匹配应用于:假如有一段文本,你只想匹配最短的可能,而不是最长. 例子 比如有一段html片段,'\this is first label\\the second label\',如何匹配出每个a标 ...
- Python: re.compile最短匹配模式,只取双引号内的值\“
用正则表达式匹配某个文本模式 1.只取双引号内的值 2.长短匹配模式对比 贪婪模式: 模式r'\"(.*)\" '的意图是匹配被双引号包含的文本,但是这个表达式中*是贪婪的 ...
- Android 显示意图和隐式意图的区别
意图在android的应用开发中是很重要的,明白了意图的作用和使用后,对开发会有很大帮助.如果没有把意图搞懂,以后开发应用会感觉缺些什么. 意图的作用: 1.激活组件 ...
- Android的显示意图和隐式意图总结
显示意图 简而言之: 通过指定特定Activity的包名和类名开启Activity 应用场景: 一般应用于本App内的activity间的跳转. XML配置信息: AndroidManifest.xm ...
- 显示intent和隐示intent有什么区别
显式Intent定义:对于明确指出了目标组件名称的Intent,我们称之为显式Intent. 隐式Intent定义:对于没有明确指出目标组件名称的Intent,则称之为隐式Intent. 说明:And ...
- Android基础总结
原文 http://blog.csdn.net/heimady/article/details/10363995 1. 前言 1.1. 什么是 3G . 4G Ÿ 第三代移动通信技术(3rd - G ...
- 安卓Intent(隐式)
相对于显式Intent(明确指出了目标组件名称的Intent),隐式Intent,没有明确指出目标组件名称.显式Intent直接用组件的名称定义目标组件,这种方式很直接.但是由于开发人员往往并不清楚别 ...
- python 字符串探讨
本文内容基于python3 几乎所有有用的程序都会涉及到某些文本处理,不管是解析数据还是产生输出.字符串的学习是重点中的重点,这一节将重点关注文本的操作处理,比如提取字符串,搜索,替换以及解析等.大部 ...
- HelloX项目github协同开发指南
概述 为了提高协同开发效率,HelloX项目已托管到github网站上.根据目前的开发进展,创建了下列几个子项目: HelloX操作系统内核项目:https://github.com/hellox-p ...
随机推荐
- Loadrunner 11检查点使用方法总结
在使用Loadrunner 11进行性能测试中,有时需要对性能测试中的功能是否全部正确进行判断.这里就需要用到“检查点”,本文总结了常用三种协议下检查点的使用方法,希望阅读本文后的小伙伴们能够掌握其使 ...
- Prism 4 文档 ---第4章 模块化应用程序开发
模块化应用程序是指将一个应用程序拆分成一系列的可以组合的功能单元.一个客户端模块封装了应用程序的一部分,并且通常是一系列相关的关注点.它可以包含一个相关的组件的集合,就像用户界面,应用程序功能,和一些 ...
- 嵌套类,PIMPL
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- LeetCode OJ:Isomorphic Strings(同构字符串)
Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...
- mac下webstorm添加scss watcher
一.前提条件: 1.安装ruby,如果我没记错的话,mac自带ruby,终端输入 ruby -v ,回车,如果显示ruby的版本号,则说明ruby环境已经安装好了.如果没有,自行安装ruby.例如我的 ...
- 2018-2019-2 网络对抗技术 20165210 Exp3 免杀原理与实践
2018-2019-2 网络对抗技术 20165210 Exp3 免杀原理与实践 免杀的概述 免杀,也就是反病毒(AntiVirus)与反间谍(AntiSpyware)的对立面,英文为Anti-Ant ...
- reactNative 的一些学习
手把手视频 学习资料大全 入门系列
- node 项目材料 集合
resfull 与 token node生成 跨平台 验证码图片 搭建简单的服务器
- mysql创建的数据库在电脑什么位置?
你可以在mysql 命令行里执行 show variables like '%datadir%'; 显示出你数据文件的路径,能找到以你创建的数据库的名字的文件夹了.
- 启动Windows防火墙提示“0x8007042c"
win8.1 启动防火墙是报错:启动Windows防火墙提示“0x8007042c" 一.检查服务 1,右击开始->运行->输入“services.msc” 打开服务 在框中找到 ...