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: 任意图的匹配的更多相关文章

  1. Python正则表达式:最短匹配

    最短匹配应用于:假如有一段文本,你只想匹配最短的可能,而不是最长. 例子 比如有一段html片段,'\this is first label\\the second label\',如何匹配出每个a标 ...

  2. Python: re.compile最短匹配模式,只取双引号内的值\“

    用正则表达式匹配某个文本模式 1.只取双引号内的值 2.长短匹配模式对比 贪婪模式:     模式r'\"(.*)\" '的意图是匹配被双引号包含的文本,但是这个表达式中*是贪婪的 ...

  3. Android 显示意图和隐式意图的区别

    意图在android的应用开发中是很重要的,明白了意图的作用和使用后,对开发会有很大帮助.如果没有把意图搞懂,以后开发应用会感觉缺些什么.        意图的作用:        1.激活组件   ...

  4. Android的显示意图和隐式意图总结

    显示意图 简而言之: 通过指定特定Activity的包名和类名开启Activity 应用场景: 一般应用于本App内的activity间的跳转. XML配置信息: AndroidManifest.xm ...

  5. 显示intent和隐示intent有什么区别

    显式Intent定义:对于明确指出了目标组件名称的Intent,我们称之为显式Intent. 隐式Intent定义:对于没有明确指出目标组件名称的Intent,则称之为隐式Intent. 说明:And ...

  6. Android基础总结

    原文  http://blog.csdn.net/heimady/article/details/10363995 1. 前言 1.1. 什么是 3G . 4G Ÿ 第三代移动通信技术(3rd - G ...

  7. 安卓Intent(隐式)

    相对于显式Intent(明确指出了目标组件名称的Intent),隐式Intent,没有明确指出目标组件名称.显式Intent直接用组件的名称定义目标组件,这种方式很直接.但是由于开发人员往往并不清楚别 ...

  8. python 字符串探讨

    本文内容基于python3 几乎所有有用的程序都会涉及到某些文本处理,不管是解析数据还是产生输出.字符串的学习是重点中的重点,这一节将重点关注文本的操作处理,比如提取字符串,搜索,替换以及解析等.大部 ...

  9. HelloX项目github协同开发指南

    概述 为了提高协同开发效率,HelloX项目已托管到github网站上.根据目前的开发进展,创建了下列几个子项目: HelloX操作系统内核项目:https://github.com/hellox-p ...

随机推荐

  1. lvs fullnat部署手册(一)fullnat内核编译篇

    标签:kernel rpm lvs fullnat 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://shanks.blog.51c ...

  2. hdu4685

    题解: 二分图匹配 对于每一个单身狗 见一个虚拟的人 然后就可以做了 代码: #include<cstdio> #include<cstring> #include<al ...

  3. Easy UI DataGrid 与 分页

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs& ...

  4. 利用国内镜像下载Android源码,并编译生成image镜像文件

    为了编译安卓源码,首先需要一个Linux,本次采用Ubuntu Kylin14.04,内核版本3.13.装在四核.4G内存.1T硬盘的虚拟机上查看内核版本号:$uname -all清华镜像地址清华镜像 ...

  5. 2017北京赛区H题

    题目链接 题意:在n*m的矩阵中选择变换或者不变换一个数变成p,使得最大子矩阵和最小 1<=n,m<=150, -1000<=p<=1000; 题解: 他人题解链接 涉及到知识 ...

  6. java基础 题和知识点总结, 关于String s是否默认初始化为null......,new一个对象和类静态域,是不是在内存中不是一个地方

    一道笔试题 22. 下面代码的运行结果为:() import java.io.*; import java.util.*; public class foo{ public static void m ...

  7. boost库之udp广播实例

    //UdpLinkServer.h //udp服务 #pragma once #include <boost/asio/ip/tcp.hpp> #include <boost/asi ...

  8. Split功能的思想实现

    using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...

  9. Android学习笔记之Activity详解

    1 理解Activity Activity就是一个包含应用程序界面的窗口,是Android四大组件之一.一个应用程序可以包含零个或多个Activity.一个Activity的生命周期是指从屏幕上显示那 ...

  10. 使用Session防止表单重复提交(不考虑多服务器)

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 原理:  1, ...