最小割的经典模型,体现出最小割的基本定义,把两个集合划分的最小代价

把一开始同意的人连源点,不同意的连汇点,有关系的人之间连边,流量都为1

不难发现,割两点(人)间的边就相当于朋友之间发生冲突

割到连源汇点的边就相当于与原来意愿不同

所以解决问题的方案等于图中的一个割

则最少冲突数=最小割=最大流

 type node=record
       point,flow,next:longint;
     end;
var edge:array[..] of node;
    cur,p,pre,numh,h:array[..] of longint;
    ans,len,i,j,x,y,n,m:longint; procedure add(x,y,f:longint);
  begin
    inc(len);
    edge[len].point:=y;
    edge[len].flow:=f;
    edge[len].next:=p[x];
    p[x]:=len;
  end; procedure sap;
  var tmp,u,i,j,neck,f,q:longint;
  begin
    u:=;
    numh[]:=n+;
    fillchar(pre,sizeof(pre),);
    fillchar(cur,sizeof(cur),);
    while h[]<n+ do
    begin
      if u=n then
      begin
        i:=;
        while i<>n do
        begin
          j:=cur[i];
          dec(edge[j].flow);
          inc(edge[j xor ].flow);
          i:=edge[j].point;
        end;
        inc(ans);
        u:=;
      end;
      q:=-;
      i:=p[u];
      while i<>- do
      begin
        j:=edge[i].point;
        if (edge[i].flow>) and (h[u]=h[j]+) then
        begin
          q:=i;
          break;
        end;
        i:=edge[i].next;
      end;
      if q<>- then
      begin
        cur[u]:=q;
        pre[j]:=u;
        u:=j;
      end
      else begin
        dec(numh[h[u]]);
        if numh[h[u]]= then break;
        i:=p[u];
        tmp:=n+;
        while i<>- do
        begin
          j:=edge[i].point;
          if (edge[i].flow>) then tmp:=min(tmp,h[j]);
          i:=edge[i].next;
        end;
        h[u]:=tmp+;
        inc(numh[h[u]]);
        if u<> then u:=pre[u];
      end;
    end;
  end; begin
  readln(n,m);
  len:=-;
  fillchar(p,sizeof(p),);
  for i:= to n do
  begin
    read(x);
    if x= then
    begin
      add(,i,);
      add(i,,);
    end
    else begin
      add(i,n+,);
      add(n+,i,);
    end;
  end;
  for i:= to m do
  begin
    readln(x,y);
    add(x,y,);
    add(y,x,);
    add(y,x,);
    add(x,y,);
  end;
  inc(n);
  sap;
  writeln(ans);
end.

bzoj1934 bzoj2768的更多相关文章

  1. 【BZOJ2768】[JLOI2010]冠军调查/【BZOJ1934】[Shoi2007]Vote 善意的投票 最小割

    [BZOJ2768][JLOI2010]冠军调查 Description 一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段.随着卫冕冠军巴萨罗那的淘汰,英超劲旅切尔西成为了头号热门.新浪体育最近在吉林教 ...

  2. 【bzoj2768/bzoj1934】[JLOI2010]冠军调查/[Shoi2007]Vote 善意的投票 最小割

    bzoj2768 题目描述 一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段.随着卫冕冠军巴萨罗那的淘汰,英超劲旅切尔西成为了头号热门.新浪体育最近在吉林教育学院进行了一次大规模的调查,调查的内容就是关 ...

  3. BZOJ1934:[SHOI2007]善意的投票 & BZOJ2768:[JLOI2010]冠军调查——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=1934 https://www.lydsy.com/JudgeOnline/problem.php? ...

  4. bzoj1934: [Shoi2007]Vote 善意的投票&&bzoj2768:[JLOI2010]冠军调查

    get到新姿势,最小割=最大流,来个大佬的PPT 这道题的做法是将st和1的xpy连,0的xpy和ed连,xpy之间jy连双向边,然后呢答案就是最小割. #include<cstdio> ...

  5. 【BZOJ1934】善意的投票(网络流)

    [BZOJ1934]善意的投票(网络流) 题面 Description 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己 ...

  6. BZOJ2768 JLOI2012冠军调查(最小割)

    容易想到网络流.将每个人拆成0和1两个点.若某人值为0的话则让源连向0,否则让1连向汇,流量为1.相互认识的人之间01各自连边.跑最小割即可. #include<iostream> #in ...

  7. [bzoj1934/2768][Shoi2007]Vote 善意的投票_最小割

    Vote 善意的投票 bzoj-1934 Shoi-2007 题目大意:题目链接. 注释:略. 想法: 这是最小割的一个比较基本的模型. 我们将所有当前同意的小朋友连向源点,边权为1.不容易的连向汇点 ...

  8. [BZOJ2768][JLOI2010]冠军调查(最小割)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2768 分析: 如果一个点i认为是0,则连一条S->i,如果认为是1,则i-> ...

  9. 【BZOJ-2768】冠军调查 最小割

    2768: [JLOI2010]冠军调查 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 971  Solved: 661[Submit][Status ...

随机推荐

  1. pdo 连接数据库 报错 could not find driver 解决方法

    在windows 下,调试一个PHP程序时,报了这个错误, could not find driver 原来我的这个程序中用到了PDO对象, 连接mysql 5.  在PHP的默认设置中,只打开了ph ...

  2. Android SDK离线安装方法详解(加速安装) 转

    AndroidSDK在国内下载一直很慢··有时候通宵都下不了一点点,最后只有选择离线安装,现在发出离线安装地址和方法,希望对大家有帮助! 离线安装包下载地址:http://dl.vmall.com/c ...

  3. CodeBlocks去掉拼写检查

    打开: 选择Compiler... 将红框里面的勾都点掉即可!

  4. fedora 安装chrome

    1. 下载chrome的rpm安装包 2. 安装lsb:   sudo yum install redhat-lsb.x86_64 3. rpm -i google-chrome-{xxxxx}.rp ...

  5. XML文件序列化和反序列化的相关内容

    问题缘由: XML反序列化出错,XML 文档(2, 2)中有错误,不应有 <configuration xmlns=''> 解决方法: 其实这个是很简单的,因为一般来说都是XML文档书写错 ...

  6. 3.8 spring-qualifier 子元素的使用与解析

      对于 qualifier 子元素,我们接触的更多的是注解形式,在使用Spring 自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个.当找不到一个匹配的 Bean 时, S ...

  7. 内存泄露 memory leak 的原因

    #include <iostream> using namespace std; void foo() { MyClass *x; x = new MyClass(); //指向的丢失了 ...

  8. aJax提交——服务端不能用request存储数据,session存数据客户端可以接收到

    aJax提交与普通提交是两种迥异的提交方式,这两种提交方式决定了客户端与服务端交互时存储.传输数据的方式也不同. aJax提交,客户端的请求数据存储在data中,服务端用request.getPara ...

  9. having——至少被订购过两回的订单

    此篇介绍having的用法 一.表:订单表,产品表 说明:订单表order ,包含prodectid 二.查询至少被订购过两回的订单 800x600 Normal 0 7.8 磅 0 2 false ...

  10. 返回canceled 代码 的原因

    ajax 不支持跨域操作jsonp,才导致返回canceled 代码. 解决的办法就是 <script>标签.jquery 也为我们提供了$.Ajax()方法或$.getScript()方 ...