博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj3692
阅读量:5798 次
发布时间:2019-06-18

本文共 1755 字,大约阅读时间需要 5 分钟。

首先这道题很容易想到二分图相关(给的很明确了);

但是我们发现,男孩之间都互相认识,女孩之间也互相认识

这样是不能划分点集的

但是男孩之间都互相认识,女孩之间也互相认识,所以男孩和男孩,女孩和女孩之间不存在不认识关系;

如果以不认识作为边的话,这样不就能划开点集吗?

于是我们换一个思维,要找最多的男女生互相认识,不就是找最多的男女生之间不存在不认识关系吗

所以,我们在不认识之间的男女之间连边,然后对这个二分图求最大独立集即可

最大独立集=点集x+点集y-最大匹配数(最小点覆盖)

要注意思维的转化

1 type node=record 2        point,next:longint; 3      end; 4 var edge:array[0..200010] of node; 5     p,cx,cy:array[0..500] of longint; 6     v:array[0..500] of boolean; 7     a:array[0..500,0..500] of boolean; 8     t,len,ans,g,b,m,i,j,x,y:longint; 9 10 procedure add(x,y:longint);11   begin12     inc(len);13     edge[len].point:=y;14     edge[len].next:=p[x];15     p[x]:=len;16   end;17 18 function find(x:longint):longint;19   var y,i:longint;20   begin21     i:=p[x];22     while i<>-1 do23     begin24       y:=edge[i].point;25       if not v[y] then26       begin27         v[y]:=true;28         if (cy[y]=-1) or (find(cy[y])=1) then29         begin30           cx[x]:=y;31           cy[y]:=x;32           exit(1);33         end;34       end;35       i:=edge[i].next;36     end;37     exit(0);38   end;39 40 begin41   readln(g,b,m);42   while (b<>0) do43   begin44     inc(t);45     fillchar(a,sizeof(a),false);46     len:=0;47     fillchar(p,sizeof(p),255);48     for i:=1 to m do49     begin50       readln(x,y);51       a[x,y]:=true;52     end;53     for i:=1 to g do54       for j:=1 to b do55         if not a[i,j] then add(i,j);56     fillchar(cx,sizeof(cx),255);57     fillchar(cy,sizeof(cy),255);58     ans:=0;59     for i:=1 to g do60       if cx[i]=-1 then61       begin62         fillchar(v,sizeof(v),false);63         ans:=ans+find(i);64       end;65     writeln('Case ',t,': ',b+g-ans);66     readln(g,b,m);67   end;68 end.
View Code

 

转载于:https://www.cnblogs.com/phile/p/4473239.html

你可能感兴趣的文章
TEST
查看>>
PAT A1037
查看>>
ReactiveSwift源码解析(三) Signal代码的基本实现
查看>>
(六)Oracle学习笔记—— 约束
查看>>
[Oracle]如何在Oracle中设置Event
查看>>
top.location.href和localtion.href有什么不同
查看>>
02-创建hibernate工程
查看>>
information_schema系列五(表,触发器,视图,存储过程和函数)
查看>>
瓜子二手车的谎言!
查看>>
[转]使用Git Submodule管理子模块
查看>>
DICOM简介
查看>>
Scrum之 Sprint计划会议
查看>>
List<T> to DataTable
查看>>
[Java]Socket和ServerSocket学习笔记
查看>>
stupid soso spider
查看>>
svn命令在linux下的使用
查看>>
Gradle之module间依赖版本同步
查看>>
java springcloud版b2b2c社交电商spring cloud分布式微服务(十五)Springboot整合RabbitMQ...
查看>>
SpringCloud使用Prometheus监控(基于Eureka)
查看>>
10g手动创建数据库
查看>>