题目链接:

https://www.luogu.org/problemnew/show/P2057

分析:

由0和1的选择我们直觉的想到0与S一堆,1与T一堆。

但是发现,刚开始的主意并不一定是最终的结果。

于是用源点S表示最终选择0的集合。

汇点T表示最终选择1的集合。

如果一个人P选择了0,那么S−>PS->PS−>P连一条流量为1的边,然后P−>TP->TP−>T连一条流量为0的边。

反之如果P选择了1,那么S−>PS->PS−>P连一条流量为0的边,然后P−>TP->TP−>T连一条流量为1的边。

最后把所有朋友对之间连流量为1的双向边(关系相互)

代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
#include<queue>
#define inf 0x7fffffff
using namespace std;
int s,t,ans;
int d[505];
struct edge
{
int to,val,rev;
edge(int _to,int _val,int _rev)
{
to=_to;
val=_val;
rev=_rev;
}
};
vector<edge>e[505];
void add(int x,int y,int w)
{
e[x].push_back(edge(y,w,e[y].size()));
e[y].push_back(edge(x,0,e[x].size()-1));
}
bool bfs()
{
queue<int>q;
memset(d,-1,sizeof(d));
d[s]=0;
q.push(s);
while(!q.empty())
{
int x=q.front();q.pop();
for(int i=0;i<e[x].size();i++)
{
int y=e[x][i].to;
if(d[y]==-1&&e[x][i].val)
{
q.push(y);
d[y]=d[x]+1;
}
}
}
if(d[t]==-1)return 0;
return 1;
}
int dfs(int x,int low)
{
if(x==t || low==0)
return low;
int totflow=0;
for(int i=0;i<e[x].size();i++)
{
int y=e[x][i].to;
int rev=e[x][i].rev;
if(d[y]==d[x]+1 && e[x][i].val)
{
int a=dfs(y,min(low,e[x][i].val));
e[x][i].val-=a;
e[y][rev].val+=a;
low-=a;
totflow+=a;
if(low==0)
return totflow;
}
}
if(low!=0)
d[x]=-1;
return totflow;
} void dinic()
{
while(bfs())
{
//printf("%d\n",ans);
ans+=dfs(s,inf);
}
}
int main()
{
int n,m,x,y,o;
scanf("%d%d",&n,&m);
s=0;t=500;
for(int i=1;i<=n;i++)
{
scanf("%d",&o);
if(o==0)
{
add(s,i,1);//add(i,t,0);
}
else
{
//add(s,i,0);
add(i,t,1);
}
}
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
add(x,y,1);add(y,x,1);
}
dinic();
printf("%d\n",ans);
return 0;
}

洛谷P2057 [SHOI2007]善意的投票 题解的更多相关文章

  1. 洛谷 P2057 [SHOI2007]善意的投票 解题报告

    P2057 [SHOI2007]善意的投票 题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照 ...

  2. [洛谷P2057][SHOI2007]善意的投票

    题目大意:有$n(n\leqslant300)$个人,每个人可以选择$0$或$1$,每个人最开始有意愿,有$m(m\leqslant\dfrac{n(n-1)}2)$对好朋友.定义一次的冲突数为好朋友 ...

  3. 洛谷$P2057\ [SHOI2007]$ 善意的投票 网络流

    正解:网络流 解题报告: 传送门! $umm$看到每个人要么0要么1就考虑最小割呗,,,? 然后贡献有两种?一种是违背自己的意愿,一种是和朋友的意愿违背了 所以考虑开一排点分别表示每个人,然后$S$表 ...

  4. [洛谷P2057][bzoj1934]善意的投票(最大流)

    题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法,他们也可以投和自己本来 ...

  5. P2057 [SHOI2007]善意的投票 (最大流)

    题目 P2057 [SHOI2007]善意的投票 解析 网络流的建模都如此巧妙. 我们把同意的意见看做源点\(s\),不同意的意见看做汇点\(t\). 那我们\(s\)连向所有同意的人,\(t\)连向 ...

  6. P2057 [SHOI2007]善意的投票 / [JLOI2010]冠军调查

    P2057 [SHOI2007]善意的投票 / [JLOI2010]冠军调查 拿来练网络流的qwq 思路:如果i不同意,连边(i,t,1),否则连边(s,i,1).好朋友x,y间连边(x,y,1)(y ...

  7. 【题解】Luogu P2057 [SHOI2007]善意的投票

    原题传送门 我们一眼就能看出这是一道最小割的题 我们设不睡觉这种状态为S,睡觉这种状态为T 对于每个人,如果不想睡觉,就从S向这个人连流量为1的边,否则,就从这个人向T连流量为1的边 对于每一对朋友, ...

  8. P2057 [SHOI2007]善意的投票 最小割

    $ \color{#0066ff}{ 题目描述 }$ 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照 ...

  9. Luogu P2057 [SHOI2007]善意的投票

    题目链接 \(Click\) \(Here\) 考虑模型转换.变成文理分科二选一带收益模型,就一波带走了. 如果没有见过这个模型的话,这里讲的很详细. #include <bits/stdc++ ...

随机推荐

  1. LINQ学习笔记(一)

    LINQ,语言集成查询(Language Integrated Query)是一组用于C#和Visual Basic语言的扩展. 它允许编写C#或Visual Basic代码以查询数据库相同的方法操作 ...

  2. RIO的性能

    看了一下微软官网RIO没有达到四五倍的宣称(而且必须在windows 2012r2才可以)最多一倍github.com/aspnet/benchmarks测试代码可以从github.com/zelia ...

  3. FrieMonkey获取手机的IMSI等信息

    procedure THeaderFooterForm.FormCreate(Sender: TObject); var TelephonyManager: JTelephonyManager; Te ...

  4. flask相关使用

    一.手动创建一个干净的含有蓝图的flask项目目录 在init.py中 from flask  import Flask​my_app=Flask(__name__)​def create_app() ...

  5. mybatis链接数据库

    DBTools类 public class DBTools { // 加载mybatis文件 public static SqlSession getSession() { //加载配置文件 Inpu ...

  6. 搭建基于.NetFrameWork的私有nuget服务端及打包项目发布上传

    一.私有Nuget服务端搭建 1.创建一个.NetFramework web项目 2.在nuget管理中 安装 nuget.server包 3.安装完成后修改web.config里面的 apikey ...

  7. echarts 中国地图标注所在点

    达到的效果: 1.本身是个中国地图‘ 2.直接通过经纬度标注 3.标注点可以是其他样子(比如:五角星) 4.标注点具有提示框并且鼠标可以进入 5.提示框里的链接可点击(可以添加为链接事件): 所需要技 ...

  8. TCP使用注意事项总结

    目录 发送或者接受数据过程中对端可能发生的情况汇总 本端TCP发送数据时对端进程已经崩溃 本端TCP发送数据时对端主机已经崩溃 本端TCP发送数据时对端主机已经关机 某个连接长时间没有数据流动 TCP ...

  9. Spring Boot:实现MyBatis动态创建表

    综合概述 在有些应用场景中,我们会有需要动态创建和操作表的需求.比如因为单表数据存储量太大而采取分表存储的情况,又或者是按日期生成日志表存储系统日志等等.这个时候就需要我们动态的生成和操作数据库表了. ...

  10. 视频技术详解:RTMP H5 直播流技术解析

    本文聚焦 RTMP 协议的最精华的内容,接进行实际操作 Buffer 的练习和协议的学习. RTMP 是什么 RTMP 全称即是 Real-Time Messaging Protocol.顾名思义就是 ...