题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2768

题意:给出一个无向图,每个点有一个值0或者1。现在重新设置每个点的值0或者1。设重新设置后的点与原来的点有x个点的值不一样;重新设置后有y条边(u,v)使得u和v的值不同。最小化x+y。

思路:若初始值为1则原点向其连边;否则其向汇点连边。对于边(u,v),u和v的值不同,则连边。求最小割。若左侧被割到,则表示将其改为0;右侧被割到,则表示将其改为1;中间被割到则表示两边冲突。

struct node
{
    int v,cap,next;
};

node edges[N];
int head[N],e;

void add(int u,int v,int cap)
{
    edges[e].v=v;
    edges[e].cap=cap;
    edges[e].next=head[u];
    head[u]=e++;
}

void Add(int u,int v,int cap)
{
    add(u,v,cap);
    add(v,u,0);
}

int pre[N],h[N],num[N],cur[N];

int Maxflow(int s,int t,int n)
{
    int i;
    for(i=0;i<=n;i++) h[i]=num[i]=0,cur[i]=head[i];
    int ans=0,u=s,v,x,Min;

    while(h[u]<n)
    {
        if(u==t)
        {
            Min=INF+1;
            for(i=s;i!=t;i=edges[cur[i]].v)
            {
                x=cur[i];
                if(edges[x].cap<Min) Min=edges[x].cap,v=i;
            }
            ans+=Min; u=v;
            for(i=s;i!=t;i=edges[cur[i]].v)
            {
                x=cur[i];
                edges[x].cap-=Min;
                edges[x^1].cap+=Min;
            }
        }
        for(i=cur[u];i!=-1;i=edges[i].next)
        {
            v=edges[i].v;
            if(edges[i].cap>0&&h[u]==h[v]+1) break;
        }
        if(i!=-1)
        {
            cur[u]=i;
            pre[edges[i].v]=u;
            u=edges[i].v;
        }
        else
        {
            if(--num[h[u]]==0) break;
            cur[u]=head[u];
            x=n;
            for(i=head[u];i!=-1;i=edges[i].next)
            {
                if(edges[i].cap>0) x=min(x,h[edges[i].v]);
            }
            h[u]=x+1;
            num[x+1]++;
            if(u!=s) u=pre[u];
        }
    }
    return ans;
}

int s,t,n,m,a[N];

int main()
{
    clr(head,-1);
    RD(n,m);
    s=0; t=n+1;
    int i,x,y;
    FOR1(i,n)
    {
        RD(a[i]);
        if(a[i]) Add(s,i,1);
        else Add(i,t,1);
    }
    FOR1(i,m)
    {
        RD(x,y);
        if(a[x]==a[y]) continue;
        if(a[x]) Add(x,y,1);
        else Add(y,x,1);
    }
    PR(Maxflow(s,t,t+1));
}

BZOJ 2768 冠军调查(最小割)的更多相关文章

  1. BZOJ 2768: [JLOI2010]冠军调查 最小割

    2768: [JLOI2010]冠军调查 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2768 Description 一年一度的欧洲足 ...

  2. 2768: [JLOI2010]冠军调查( 最小割 )

    最小割... 怎么乱搞都可以 -------------------------------------------------------------------------------- #inc ...

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

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

  4. [BZOJ 2768] 冠军调查

    Link:https://www.lydsy.com/JudgeOnline/problem.php?id=2768 Solution: 一道比较基础的最大流的题目 一般看到将点分为两类的题目就要往网 ...

  5. JLOI2010 冠军调查 最小割

    var b,f:..] of longint; s,t,i,j,n,m,x,y:longint; l,h:..]of longint; a:..,..]of longint; procedure bf ...

  6. bzoj 1497 最大获利 - 最小割

    新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一项,就需要完成前期市场研 ...

  7. [BZOJ 2127] happiness 【最小割】

    题目链接:BZOJ - 2127 题目分析 首先,每个人要么学文科,要么学理科,所以可以想到是一个最小割模型. 我们就确定一个人如果和 S 相连就是学文,如果和 T 相连就是学理. 那么我们再来确定建 ...

  8. BZOJ.3532.[SDOI2014]LIS(最小割ISAP 退流)

    BZOJ 洛谷 \(LIS\)..经典模型? 令\(f_i\)表示以\(i\)结尾的\(LIS\)长度. 如果\(f_i=1\),连边\((S,i,INF)\):如果\(f_i=\max\limits ...

  9. BZOJ 2561 最小生成树 | 网络流 最小割

    链接 BZOJ 2561 题解 用Kruskal算法的思路来考虑,边(u, v, L)可能出现在最小生成树上,就是说对于所有边权小于L的边,u和v不能连通,即求最小割: 对于最大生成树的情况也一样.容 ...

随机推荐

  1. springmvcの神总结のreadme

    ********李守宏springmvc******** 3.== --\springmvc一个controller实现多个方法 ----\继承MultiActionController ----\配 ...

  2. 夺命雷公狗ThinkPHP项目之----企业网站19之网站配置信息的修改

    我们这个其实也是很简单的,思路是直接将提交过来的cf_id 改成我们自己定义好的 “1” 即可,因为1配置只能有一个,所以永久都是该id 为1的: 先来完成我们的控制器,代码如下所示: public ...

  3. JSP-09-使用EL显示数据

    目的:为了使JSP写起来更加简单. 9.1  EL表达式 ${EL表达式}  :  ${unsername} 操作符:   “. ”操作符: 用来访问对象的属性    ${news.title} “[ ...

  4. OpenStack 镜像密码修改办法

    Contents [hide] 1 场景 2 方案一 3 方案二 4 方案三 5 目前采用方案三 场景 用户将实例里的root密码修改了,/root/.ssh/的公钥文件删除了,然后把密码忘记了,需要 ...

  5. linux设备驱动归纳总结(七):1.时间管理与内核延时【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-100005.html linux设备驱动归纳总结(七):1.时间管理与内核延时 xxxxxxxxxxx ...

  6. python any()和all()用法

    #any(x)判断x对象是否为空对象,如果都为空.0.false,则返回false,如果不都为空.0.false,则返回true #all(x)如果all(x)参数x对象的所有元素不为0.''.Fal ...

  7. python读入文件

    举例说明吧,路径一定要带转义符‘\’,下面的例子中,每一行是一个样本的feature >>> myfile=open("D:\\301\\graduate_thesis\\ ...

  8. 搭建HTTP Live Streaming直播系统

    最近,需要将苹果的HTTP Live Streaming系统搭建起来.完全没有头绪,故第一步就是学习. 一.学习资料 官网资料 1. http://developer.apple.com/resour ...

  9. [转]iOS应用程序生命周期(前后台切换,应用的各种状态)详解

    转载地址:http://blog.csdn.net/totogo2010/article/details/8048652 iOS的应用程序的生命周期,还有程序是运行在前台还是后台,应用程序各个状态的变 ...

  10. 使用 Filter 完成一个简单的权限模型

    ****对访问进行权限控制: 有权限则可以访问, 否则提示: 没有对应的权限, 请 返回其访问者的权限可以在manager那进行设置: