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)$对好朋友.定义一次的冲突数为好朋友 ... 
随机推荐
- easyui学习索引页
			<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>复 ... 
- vbox虚拟机vdi文件用VMware打开
			转自:https://blog.51cto.com/dahui09/1863486 方法一: 使用VirtualBox 自带的VBoxManage来进行格式转换: 1.安装VBoxManage 2.使 ... 
- MariaDB——数据库集群
			Mariadb数据库集群 mariadb主从 主从多用于网站架构,因为主从的同步机制是异步的,数据的同步有一定的延迟性,也就是说可能会导致数据丢失,但是性能比较好,因此网站大多数 用的是主从架构的数据 ... 
- (5)LoraWAN:Join procedure、Receive Windows
			网络在建立之初,终端设备启动后需要向服务端发起Jion请求(接入请求),只有在接入请求得到成功答复,并根据答复配置相关参数后,终端才算成功加入网络.Jion成功后才能进行数据的上行.下行通信. Jio ... 
- 嵊州普及Day3T1
			题意:n座山,每天袭击k面,不能为同一座.问最少几天袭击所有山两面. 思路:不管如何,n,k<=10,做了就能过,考试时先想的暴力模拟,后来发现有规律,看看就好了. 见代码: #include& ... 
- Jmeter - Linux 下面执行jmeter-server的时候出现:An error occurred: Cannot start. localhost is a loopback address.错误
			Jmeter - Linux 下面执行jmeter-server的时候出现:An error occurred: Cannot start. localhost is a loopback addre ... 
- 003、Java的单行注释
			代码如下: package TIANPAN; public class TestDemo { public static void main(String args[]) { // JAVA的单行注释 ... 
- delphi关闭和禁用Windows服务
			function StopServices(const SvrName: string): Boolean; var SCH, SvcSCH: SC_HANDLE; SS: TServiceStatu ... 
- 注解方式实例化Java类
			context:component-scan标签: Sprng容器通过context:component-scan标签扫描其base-package标签属性值指定的包及其子包内的所有的类并实例化被@C ... 
- 加傲腾内存的电脑PE无法识别本地磁盘解决办法(M.2接口??)
			---恢复内容开始--- PE一直无法识别本地硬盘一直以为是主板设置的事情!原来是新兴的接口(M.2固态具体我不大明白)的事情,需要磁盘驱动,因为PE是精简的大多数不带驱动,但是2018年的新更新的P ... 
