题意:

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. (转) 实现wince datagrid 上下滑屏数据浏览

    开发 基于wince 手持设备数据库应用时 由于是触摸屏 当datagrid 数据过多 往往用户烦于去控制又窄又细的上下滚动条 尤其是高分辨率的屏上 (如魅族M8系统 720×480) 而且datag ...

  2. Android笔记之自定义PopupWindow

    效果图 popup_window_addition.xml <?xml version="1.0" encoding="utf-8"?> <L ...

  3. Java HotSpot(TM) 64-Bit Server VM warning: Insufficient space for shared memory file...

    Java HotSpot(TM) 64-Bit Server VM warning: Insufficient space for shared memory file: 把tomcat中的日志删除, ...

  4. android RefBase、sp、wp

    首先RefBase在android的c++部分是作为一个所有类的基类,其作用跟Java中的Object类似 这个类中存在一个私有成员: weakref_impl* const mRefs;(weakr ...

  5. UOJ Easy Round#7

    UOJ Easy Round#7 传送门:http://uoj.ac/contest/35 题解:http://matthew99.blog.uoj.ac/blog/2085 #1 题意: 在一个(2 ...

  6. (转)定制findbugs规则

    转载自http://www.51testing.com/html/97/13997-211893.html 这类文章极少,字节码操作需要对becl库及jvm字节码操作有一定常识.参考: http:// ...

  7. php封装数据库mysql, mysqli

    <?php header("content-type:text/html;charset=utf-8"); class db{    //私有的静态属性    private ...

  8. Opencv— — Color Gradient

    // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...

  9. node.js版本管理(Win) --- nvm-window

    目录 1. 安装 2. 使用 1. 安装 去往Git链接:https://github.com/coreybutler/nvm-windows. 点击下载链接: 选择第一个nvm-noinstall. ...

  10. QQ登陆功能的实现2

    QQ登陆功能的实现2 由于看到园子里有朋友说需要讲解和剖析实现的步骤,前面的QQ登陆实现只有代码,所以这篇补上 1.  分析 1). 当运行QQ.exe后会出现qq登陆界面的窗体 2). 我们用spy ...