题意:

N个人,有两种人,M对亲密关系,问最少删除几个人达到没有亲密关系。

思路:

最大匹配 = 最小独立集,删掉该人对最大匹配数的影响,如果没有影响,删不删都无所谓,如果有影响贼删除;

类似HDU1281;

处理可用删除这个点以后找增广,如果找的到增广则无影响,找不到增广则有影响。

错误就是二分图,我要删的点有两种,两组点都有可能删除,*单方面删除了一种*。

错误在了无意识偏爱了一张图,其实二分图,两张图非常独立,地位平等且重要!

//#include<bits/stdc++.h>
//using namespace::std;
//typedef pair<int,int> PII;
#include<cstdio>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std; const int N=2e2+10; bool ma[N][N];
int cx[N],cy[N],n,m;
bool vis[N],col[N],deleted[N]; bool FindPateX(int u)
{
if(deleted[u]) return false;
for(int i=0;i<n;i++)
{
if(ma[u][i]&&!vis[i]&&!deleted[i]&&col[i])
{
vis[i]=true;
if(cy[i]==-1||FindPateX(cy[i]))
{
cx[u]=i;
cy[i]=u;
return true;
}
}
}
return false;
} bool FindPateY(int u)
{
if(deleted[u]) return false;
for(int i=0;i<n;i++)
{
if(ma[u][i]&&!vis[i]&&!deleted[i]&&!col[i])
{
vis[i]=true;
if(cx[i]==-1||FindPateY(cx[i]))
{
cx[i]=u;
cy[u]=i;
return true;
}
}
}
return false;
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int u,v;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++) scanf("%d",&col[i]);
memset(ma,0,sizeof(ma));
while(m--)
{
scanf("%d%d",&u,&v);
if(col[u]!=col[v])
ma[u][v]=ma[v][u]=1;
}
int ans=0;
memset(cx,-1,sizeof(cx));
memset(cy,-1,sizeof(cy));
memset(deleted,false,sizeof(deleted));
for(int i=0;i<n;i++)
{
if(!col[i]&&cx[i]==-1)
{
memset(vis,0,sizeof(vis));
ans+=FindPateX(i);
}
}
printf("%d",ans);
int temp;
for(int i=0;i<n;i++)
{
if(!col[i])
{
if(cx[i]!=-1)
{
temp=cx[i];
cx[i]=cy[temp]=-1;
memset(vis,0,sizeof(vis));
deleted[i]=true;
if(FindPateY(temp))
deleted[i]=false;
else
printf(" %d",i);
}
}
else
{
if(cy[i]!=-1)
{
temp=cy[i];
cx[temp]=cy[i]=-1;
deleted[i]=true;
memset(vis,0,sizeof(vis));
if(FindPateX(temp))
deleted[i]=false;
else
printf(" %d",i);
}
}
}
puts("");
}
return 0;
}

POJ3715【二分匹配-增广】的更多相关文章

  1. Secret Milking Machine POJ - 2455 网络流(Dinic算法---广搜判断+深搜增广)+时间优化+二分

    题意: 第一行输入N M C ,表示从1到N有M条无向边,现在要从1走到N 走C次完全不同的路径,求最长边的最小值.下面M行是从a点到b点的距离. 建图: 题上说从两点之间可以有多条边,问的是从1~N ...

  2. [kuangbin带你飞]专题十 匹配问题 二分匹配部分

    刚回到家 开了二分匹配专题 手握xyl模板 奋力写写写 终于写完了一群模板题 A hdu1045 对这个图进行 行列的重写 给每个位置赋予新的行列 使不能相互打到的位置 拥有不同的行与列 然后左行右列 ...

  3. [ACM_图论] Sorting Slides(挑选幻灯片,二分匹配,中等)

    Description Professor Clumsey is going to give an important talk this afternoon. Unfortunately, he i ...

  4. [ACM_图论] The Perfect Stall 完美的牛栏(匈牙利算法、最大二分匹配)

    描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来:每头奶牛都只愿意在她们 ...

  5. poj1274 二分匹配

    今天复习二分匹配,A 了一道模板题. 二分匹配需要理解增广路的寻找.用dfs来更新最大匹配.注意一些点:赋初值:愚蠢地把==写成了= ; 然后match的记值;每个点都要重新走一遍. #include ...

  6. UVA 11419 SAM I AM(最大二分匹配&最小点覆盖:König定理)

    题意:在方格图上打小怪,每次可以清除一整行或一整列的小怪,问最少的步数是多少,又应该在哪些位置操作(对输出顺序没有要求). 分析:最小覆盖问题 这是一种在方格图上建立的模型:令S集表示“行”,T集表示 ...

  7. poj 1247 The Perfect Stall 裸的二分匹配,但可以用最大流来水一下

    The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16396   Accepted: 750 ...

  8. 【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  9. HDU 3036 Escape 网格图多人逃生 网络流||二分匹配 建图技巧

    题意: 每一个' . '有一个姑娘, E是出口,'.'是空地 , 'X' 是墙. 每秒钟每一个姑娘能够走一步(上下左右) 每秒钟每一个出口仅仅能出去一个人 给定n*m的地图, 时限T 问全部姑娘是否能 ...

随机推荐

  1. ESXi 5.5 RTL9168E网卡驱动 找到网卡

    如果你对专业服务器的价格望而却步,恰巧又想在普通的PC上安装ESXi,恰巧又是ESXi 5.5版本,那么这篇文章中提及的问题你可能会遇到,并能给你提供一些帮助. 1.成功安装重启以后提示“no boo ...

  2. Hibernater中的持久化对象以及状态转换

    一.持久化对象的要求 1.提供一个无参的构造器:使Hibernate可以使用Constructor.newInstance() 来实例化持久化类. 2.提供一个标识属性(identifier prop ...

  3. meteor ---快速启动meteor和 mongodb 方法--MAC

    c:~ lsg$ cat .bash_profile c:~ lsg$ vim .bash_profile --- 修改这个文件 按i 修改文件 shift+Z+Z 保存修改内容 添加如下代码 exp ...

  4. 一看就会,科目三靠边停车30cm技巧!再也不怕不会停车了!

    靠边停车是科目三考试的最后一关,如果在这一关失败,那之前所有的努力都功亏一篑了,你感觉吃不吃亏?就连我们自己平时开车,轮胎万一与路边石阶刮蹭,就会造成不小的伤害.那么靠边停车时有哪些注意要点呢?请和小 ...

  5. IE浏览器没有加载CSS或js文件的秘密及解决办法

    其实是两处资料拼成这一篇博文的,因为在开发过程中遇到,有的文章只是说明原因,而没有给出解决方案,所以再次给出解释和解决方法,以供参考,如果有好的解决方法,也请分享下! ---------------- ...

  6. js程序开发-2

    <h1>DOM节点操作</h1> createElement() 创建节点:返回一个元素对象; cloneNode() 克隆节点,接受一个参数deep,值为true或false ...

  7. hdu 1205 吃糖果(抽屉原理)

    题意:N种糖果,不能把一样的放在一起吃,即第一次吃一种,下一次吃另一种. 思路:找到个数最多的糖果种类(最大的数目记作 ma,该糖果种类记为a),首先把这n个糖果放到n个抽屉里面,然后把剩余的N-1种 ...

  8. 001-将Python源码转换为不需要环境的可执行文件

    1 安装pyinstaller pip install pyinstaller #或者 pip3 install pyinstaller 2 生成打包文件 在命令行中输入 pyinstaller -F ...

  9. python 文件与文件夹常见操作以及os.walk的用法

    文件操作: In [34]: import os In [35]: os.rename("hello[复件].py","hello111.py")       ...

  10. GitHub的使用方法

    版本控制系统 > Git 分布式 > Subversion 集中式 1. 安装git: # apt-get install git //root权限 $ sudo apt-get inst ...