[BZOJ1934]SHOI2007 Vote|最小割

原创 2015年04月18日 11:13:43

一开始就觉得是最小割转最大流做,,没想出怎么建图。。其实也挺显然,将S向所有1的人连边,所有0的人像T连边,有边的连起双向边,对于一条ST的路径SuvT,割掉S-u表示u违背自己,代价为1,割掉u-v表示朋友冲突,代价为1,割掉v-T表示v违背自己,代价为1,所以就是最小割。。

#include<iostream>
#include<cstdio>
#define N 305
#define M 100005
#define inf 99999999
using namespace std;
struct edge{
  int e,f,next;
}ed[M];
int n,m,q,s,e,ne=1,nd,i,a[N],d[N],u[N],que[N];
void add(int s,int e,int f)
{
  ed[++ne].e=e;ed[ne].f=f;
  ed[ne].next=a[s];a[s]=ne;
}
bool bfs(int s,int t)
{
  int i,j,head=1,tail=1,get,to;
  for (i=0;i<=nd;i++) u[i]=d[i]=0;
  que[1]=s;u[s]=1;
  while (head<=tail)
	{
	  get=que[head++];
	  for (j=a[get];j;j=ed[j].next)
		if (ed[j].f&&!u[to=ed[j].e])
		  {
			d[to]=d[get]+1;
			que[++tail]=to;
			u[to]=1;
		  }
	}
	  return d[t]!=0;
}
  int extend(int x,int minf,int t)
  {
	int f=minf,del,j;
	if (x==t) return minf;
	for (j=a[x];j;j=ed[j].next)
	  if (ed[j].f&&d[ed[j].e]==d[x]+1)
		{
		  del=extend(ed[j].e,min(minf,ed[j].f),t);
		  ed[j].f-=del;ed[j^1].f+=del;
		  minf-=del;
		  if(!minf) break;
		}
	if (f==minf) d[x]=0;
	return f-minf;
  }
  int dinic(int s,int t)
  {
	int ans=0;
	while (bfs(s,t)) ans+=extend(s,inf,t);
	return ans;
  }
int main()
{
  scanf("%d%d",&n,&m);
  nd=n+1;
  for (i=0;i<=nd;i++) a[i]=0;
  for (i=1;i<=n;i++)
	{
	  scanf("%d",&q);
	  if (q) add(0,i,1),add(i,0,0);else add(i,nd,1),add(nd,i,0);
	}
  for (i=1;i<=m;i++)
	{
	  scanf("%d%d",&s,&e);
	  add(s,e,1);add(e,s,1);
	}
  printf("%d\n",dinic(0,nd));
}


图像分割原理

-
  • 1970年01月01日 08:00

【BZOJ1934】【codevs2341】善意的投票,二分图最小割

只要想起一生中后悔的事,梅花便落了下来。
  • xym_CSDN
  • xym_CSDN
  • 2016-05-03 21:48:43
  • 216

【bzoj 1934】[Shoi2007]Vote 善意的投票 最小割

【bzoj 1934】[Shoi2007]Vote 善意的投票 最小割
  • pbihao
  • pbihao
  • 2016-10-21 17:25:44
  • 205

[SHOI2007]BZOJ1934 Vote善意的投票-最小割

题目链接:传送门 题目大意:请自行参考原题 题解:我承认如果不告诉我这是个最小割我是想不到的QWQ 一个同学i的意见是x如果x=1就建边(S,i,1)否则建边(i,T,1)。 如果xy是朋友就建边(x...
  • Mys_C_K
  • Mys_C_K
  • 2017-05-12 15:12:36
  • 229

bzoj1934【shoi2007】Vote善意的投票

最小割
  • AaronGZK
  • AaronGZK
  • 2015-12-26 00:05:35
  • 1383

BZOJ1934【最小割】

/* I will wait for you */ #include #include #include #include #include #include #include #include ...
  • Lethelody
  • Lethelody
  • 2015-04-09 11:16:56
  • 255

[BZOJ1934]SHOI2007 Vote|最小割

一开始就觉得是最小割转最大流做,,没想出怎么建图。。其实也挺显然,将S向所有1的人连边,所有0的人像T连边,有边的连起双向边,对于一条S到T的路径S,u,v,T,割掉S-u表示u违背自己,代价为1,割...
  • Tag_king
  • Tag_king
  • 2015-04-18 11:13:43
  • 584

bzoj1934 [Shoi2007]Vote 善意的投票

题目同样的,我们也是分成赞同与不赞同两个集合,也是最小割。把源点连向赞同,容量为1,不赞同连向汇点,容量为1,再考虑每个人之间的影响,把互相为好朋友之间连双向边,容量为1。这还是比较简单的网络流。#i...
  • wanherun
  • wanherun
  • 2017-08-30 07:41:17
  • 73

[bzoj1934]: [Shoi2007]Vote 善意的投票

1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 2136  Solved: 1341 [Sub...
  • xljer_
  • xljer_
  • 2017-06-26 10:14:02
  • 116

[BZOJ1934][Shoi2007]Vote 善意的投票(最小割)

一路走来形单影只 转身回望大家已经远去 即使如此我依然前行 这正是我的坚强...
  • Clove_unique
  • Clove_unique
  • 2016-04-28 16:40:55
  • 612
收藏助手
不良信息举报
您举报文章:[BZOJ1934]SHOI2007 Vote|最小割
举报原因:
原因补充:

(最多只允许输入30个字)