题意:

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. h5页面测试

    转自:http://www.blogjava.net/qileilove/archive/2014/07/24/416154.html?utm_source=tuicool&utm_mediu ...

  2. Linux 中权限的再讨论( 上 )

    前言 在Linux系统中,用户分为三个部分( 所有者 同组人 其他 ).每个部分的权限又可以赋予读/写/执行权限.这样,文件的权限标记一共包含 9 个权限位.好了,很多朋友对于Linux权限的了解就仅 ...

  3. 在JS中将JSON的字符串解析成JSON数据格式

    使用eval函数来解析 <script> var data="{root: [{name:'1',value:'0'},{name:'6101',value:'北京市'},{na ...

  4. EasyPusher手机直播图像旋转90度后画面重复的问题

    本文转自:http://blog.csdn.net/holo_easydarwin/article/details/51147379 最初在做EasyPusher手机直播的时候遇到过一个问题:手机竖屏 ...

  5. Linux就该这么学--命令集合6(打包压缩文件、文件查询搜索命令)

    1.tar命令用于对文件打包压缩或解压:(tar [选项] [文件]) 打包并压缩文件:tar -czvf 压缩包名.tar.gz 文件名 解压并展开压缩包:tar -xzvf 压缩包名.tar.gz ...

  6. xcode环境变量设置(转载)

    一般我们在xcode里面配置包含工程目录下头文件的时候,都要关联着相对路径和绝对路径,如果只是自己用这个项目,用绝对路径的问题不大,但是如果你把工程发给别人,别人就要在改这个绝对路径,这时候绝对路径的 ...

  7. Chapter 3 Shared Assemblies and Strongly Named Assemblies

    As time marches on,MS developers and control developer modify their code:they fix bugs,patch securit ...

  8. 网页兼容性测试(工具使用IETESTER、Firefox、360安全浏览器)

    网页兼容性测试主要是针对不同的浏览器进行的测试.由于用户浏览器的不同,往往都会使我们的网页发生页面样式错乱,图片无法显示等问题.对于前端开发工程师来说,确保代码在各种主流浏览器的各个版本中都能正常显示 ...

  9. codeforces C. Inna and Huge Candy Matrix 解题报告

    题目链接:http://codeforces.com/problemset/problem/400/C 题目意思:给出一个n行m列的矩阵,问经过 x 次clockwise,y 次 horizontal ...

  10. tensorflow实现图像的翻转

    from:https://blog.csdn.net/uestc_c2_403/article/details/72703097 tensorflow内部含有实现图像翻转的函数为 tf.image.f ...