P2057 [SHOI2007]善意的投票 / [JLOI2010]冠军调查
P2057 [SHOI2007]善意的投票 / [JLOI2010]冠军调查
拿来练网络流的qwq
思路:如果i不同意,连边(i,t,1),否则连边(s,i,1).好朋友x,y间连边(x,y,1)(y,x,1),最小割即为答案。每割一条边表示与他的意愿不相符。
#include<bits/stdc++.h>
using namespace std;
const int N=305;
const int inf=1000000007;
int head[N],num_edge=1;
struct edge{
int nxt,val,to;
}e[N*N*2];
inline void add(int from,int to,int val)
{
++num_edge;
e[num_edge].nxt=head[from];
e[num_edge].to=to;
e[num_edge].val=val;
head[from]=num_edge;
}
int n,m,s,t;
int maxflow,dep[N],cur[N];
bool inq[N];
bool bfs()
{
for(int i=1;i<=t;++i)
inq[i]=0,dep[i]=inf,cur[i]=head[i];
dep[s]=1;
queue<int>q;
q.push(s);
while(!q.empty())
{
int u=q.front();q.pop();
inq[u]=0;
for(int i=head[u];i;i=e[i].nxt)
{
int v=e[i].to;
if(dep[v]>dep[u]+1&&e[i].val)
{
dep[v]=dep[u]+1;
if(!inq[v])q.push(v),inq[v]=1;
}
}
}
return dep[t]!=inf;
}
int dfs(int u,int flow)
{
if(u==t)
{
maxflow+=flow;
return flow;
}
int used=0,rlow;
for(int i=cur[u];i;i=e[i].nxt)
{
cur[u]=i;
int v=e[i].to;
if(dep[v]==dep[u]+1&&e[i].val)
{
rlow=dfs(v,min(flow-used,e[i].val));
if(rlow)
{
used+=rlow;
e[i].val-=rlow;
e[i^1].val+=rlow;
if(used==flow)break;
}
}
}
return used;
}
void dinic(){while(bfs())dfs(s,inf);}
int main()
{
scanf("%d%d",&n,&m);s=n+1;t=n+2;
for(int i=1,x;i<=n;++i)
{
scanf("%d",&x);
if(x==0)add(i,t,1),add(t,i,0);
if(x==1)add(s,i,1),add(i,s,0);
}
for(int i=1,x,y;i<=m;++i)
{
scanf("%d%d",&x,&y);
add(x,y,1);add(y,x,0);
add(y,x,1);add(x,y,0);
}
dinic();
printf("%d\n",maxflow);
return 0;
}
P2057 [SHOI2007]善意的投票 / [JLOI2010]冠军调查的更多相关文章
- 【题解】[SHOI2007]善意的投票 / [JLOI2010]冠军调查
Link \(\text{Solution:}\) 我们令源点和汇点分别为睡觉和不睡觉这两种互斥的决策点.把小朋友看成点,问题转化为最小割. 每一个小朋友对自己的意愿指向的汇点/源点.容量为\(1.\ ...
- 洛谷 P2057 [SHOI2007]善意的投票 解题报告
P2057 [SHOI2007]善意的投票 题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照 ...
- P2057 [SHOI2007]善意的投票 (最大流)
题目 P2057 [SHOI2007]善意的投票 解析 网络流的建模都如此巧妙. 我们把同意的意见看做源点\(s\),不同意的意见看做汇点\(t\). 那我们\(s\)连向所有同意的人,\(t\)连向 ...
- P2057 [SHOI2007]善意的投票 最小割
$ \color{#0066ff}{ 题目描述 }$ 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照 ...
- 洛谷P2057 [SHOI2007]善意的投票 题解
题目链接: https://www.luogu.org/problemnew/show/P2057 分析: 由0和1的选择我们直觉的想到0与S一堆,1与T一堆. 但是发现,刚开始的主意并不一定是最终的 ...
- Luogu P2057 [SHOI2007]善意的投票
题目链接 \(Click\) \(Here\) 考虑模型转换.变成文理分科二选一带收益模型,就一波带走了. 如果没有见过这个模型的话,这里讲的很详细. #include <bits/stdc++ ...
- 【题解】Luogu P2057 [SHOI2007]善意的投票
原题传送门 我们一眼就能看出这是一道最小割的题 我们设不睡觉这种状态为S,睡觉这种状态为T 对于每个人,如果不想睡觉,就从S向这个人连流量为1的边,否则,就从这个人向T连流量为1的边 对于每一对朋友, ...
- P2057 [SHOI2007]善意的投票
思路 简单的最小割模型 最小割的模型就是选出一些边,把点集划分成S和T两个部分,使得代价最小 到这题上就是板子了 代码 #include <cstdio> #include <alg ...
- [洛谷P2057][SHOI2007]善意的投票
题目大意:有$n(n\leqslant300)$个人,每个人可以选择$0$或$1$,每个人最开始有意愿,有$m(m\leqslant\dfrac{n(n-1)}2)$对好朋友.定义一次的冲突数为好朋友 ...
随机推荐
- centos 虚拟机安装调试
service network restart reboot yum update -y cd /etccd sysconfigcd network-scripts[root@u0mo5 networ ...
- Eclipse启动选择启动空间
window -->preferences-->General-->Startup and Shutdown -->Workspaces-->勾选Prompt for w ...
- Redis官方Tutorial
基本命令 包括SET , GET , INCR , DEL , EXPIRE , TTL SET server:name "10" GET server:name IN ...
- office2019激活办法
@echo off (cd /d "%~dp0")&&(NET FILE||(powershell start-process -FilePath '%0' -ve ...
- Visual Studio中的“build”、“rebuild”、“clean”的区别
区别 rebuild基本相当于clean+build build只针对修改过的文件进行编译,rebuild会对所有文件编译(无论是否修改). clean 删除中间和输出文件,中间文件是指一些生成应用的 ...
- 【LeetCode】三角形最小路径和
[问题]给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上.例如,给定三角形: [ [], [,], [,,], [,,,] ] 自顶向下的最小路径和为 (即, + + + ...
- 链表题目汇总(python3)
1.从头到尾打印链表 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. # -*- coding:utf-8 -*- class ListNode: def __init__(self ...
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'解决
用XAMPP装装好mysql之后,mysql -uroot 连不上,报这个错误: ERROR 2002 (HY000): Can't connect to local MySQL server t ...
- vue table已选列数据
vue Table@on-selection-change="test" 已选中项数据 test(selection){} <Table :data="tableD ...
- tools.lombok
@Slf4j @Data @Accessors @Builder