B1934 [Shoi2007]Vote 善意的投票 最小割
一开始不太会,结果看完题解就是一个建图的网络流。然后就结了。
题干:
题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉。对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神。虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法,他们也可以投和自己本来意愿相反的票。我们定义一次投票的冲突数为好朋友之间发生冲突的总数加上和所有和自己本来意愿发生冲突的人数。 我们的问题就是,每位小朋友应该怎样投票,才能使冲突数最小? 输入输出格式 输入格式:
文件的第一行只有两个整数n,m,保证有2≤n≤,≤m≤n(n-)/。其中n代表总人数,m代表好朋友的对数。文件第二行有n个整数,第i个整数代表第i个小朋友的意愿,当它为1时表示同意睡觉,当它为0时表示反对睡觉。接下来文件还有m行,每行有两个整数i,j。表示i,j是一对好朋友,我们保证任何两对i,j不会重复。 输出格式:
只需要输出一个整数,即可能的最小冲突数。 输入输出样例 输入样例#: 复制 输出样例#: 复制 说明 ≤n≤,≤m≤n(n-)/。
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
#define duke(i,a,n) for(int i = a;i <= n;i++)
#define inf 99999999
template <class T>
void read(T &x)
{
char c;
bool op = ;
while(c = getchar(),c > '' || c < '')
if(c == '-') op = ;
x = c - '';
while(c = getchar(),c >= '' && c <= '')
x = x * + c - '';
if(op == )
x = -x;
}
struct node{
int x,y,c,nxt,other;
};
node a[];
int len = ,last[],st,ed;
int list[];
void add(int x,int y,int w)
{
int k1,k2;
a[++len].nxt = last[x];
k1 = len;
a[len].x = x;
a[len].y = y;
a[len].c = w;
last[x] = len;
a[++len].nxt = last[y];
k2 = len;
a[len].x = y;
a[len].y = x;
a[len].c = w;
last[y] = len;
a[k1].other = k2;
a[k2].other = k1;
}
int h[];
bool bfs()
{
memset(h,,sizeof(h));
h[st] = ;
int head,tail;
list[] = st;
head = ;
tail = ;
while(head != tail)
{
int x = list[head];
for(int k = last[x];k;k = a[k].nxt)
{
int y = a[k].y;
if(a[k].c > && h[y] == )
{
h[y] = h[x] + ;
list[tail++] = y;
}
}
head++;
}
if(h[ed] > )
return true;
else
return false;
}
int find(int x,int f)
{
if(x == ed)
{
return f;
}
int s = ,t;
for(int k = last[x];k;k = a[k].nxt)
{
int y = a[k].y;
if(s < f && h[y] == (h[x] + ) && a[k].c > )
{
t = find(y,min(a[k].c,f - s));
s += t;
a[k].c -= t;
a[a[k].other].c += t;
}
}
if(s == )
h[x] = ;
return s;
}
int n,m;
int main()
{
read(n);read(m);
int x,y;
st = ;
ed = ;
duke(i,,n)
{
read(x);
if(x == )
{
add(st,i,);
}
else
{
add(i,ed,);
}
}
duke(i,,m)
{
read(x);read(y);
add(x,y,);
}
int tot = ;
while(bfs())
{
tot += find(st,inf);
}
printf("%d",tot);
return ;
}
B1934 [Shoi2007]Vote 善意的投票 最小割的更多相关文章
- BZOJ 1934: [Shoi2007]Vote 善意的投票 最小割
1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnl ...
- 【BZOJ2768】[JLOI2010]冠军调查/【BZOJ1934】[Shoi2007]Vote 善意的投票 最小割
[BZOJ2768][JLOI2010]冠军调查 Description 一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段.随着卫冕冠军巴萨罗那的淘汰,英超劲旅切尔西成为了头号热门.新浪体育最近在吉林教 ...
- 最小投票BZOJ 1934([Shoi2007]Vote 善意的投票-最小割)
上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助.今天在这里和大家一起学习一下最小投票 1934: [Shoi2007]Vote 好心的投票 Time Limit: 1 Sec Memory L ...
- 【bzoj2768/bzoj1934】[JLOI2010]冠军调查/[Shoi2007]Vote 善意的投票 最小割
bzoj2768 题目描述 一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段.随着卫冕冠军巴萨罗那的淘汰,英超劲旅切尔西成为了头号热门.新浪体育最近在吉林教育学院进行了一次大规模的调查,调查的内容就是关 ...
- bzoj1934 Vote 善意的投票 最小割(最大匹配)
题目传送门 题目大意:很多小朋友,每个小朋友都有自己的立场,赞成或者反对,如果投了和自己立场不同的票会得到一个能量.又有很多朋友关系,如果一个人和他的一个朋友投的票不同,也会得到一个能量,现在问,通过 ...
- bzoj1934: [Shoi2007]Vote 善意的投票(显然最小割)
1934: [Shoi2007]Vote 善意的投票 题目:传送门 题解: 明显的不能再明显的最小割... st连同意的,不同意的连ed 朋友之间两两连边(即双向边) 流量都为1... 为啥: 一个人 ...
- BZOJ_1934_[Shoi2007]Vote 善意的投票
BZOJ_1934_[Shoi2007]Vote 善意的投票 Description 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然 ...
- bzoj1934: [Shoi2007]Vote 善意的投票
最大流..建图方式都是玄学啊.. //Dinic是O(n2m)的. #include<cstdio> #include<cstring> #include<cctype& ...
- 1934: [Shoi2007]Vote 善意的投票
1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 1174 Solved: 723[Submit][S ...
随机推荐
- 深入浅出的 SQL Server 查询优化
目前网络数据库的应用已经成为最为广泛的应用之一了,并且关于数据库的安全性,性能都是企业最为关心的事情.数据库渐渐成为企业的命脉,优化查询就解决了每个关于数据库应用的性能问题,在这里microsoft ...
- JS——scroll封装
DTD未声明:document.body.scrollTop DTD已声明:document.documentElement.scrollTop 火狐谷歌IE9:window.pageYOffset ...
- zxing 生成条形码
private Bitmap Out1DImg() { // 1.设置条形码规格 EncodingOptions encodeOption = new EncodingOptions(); encod ...
- [C#] Linq 动态条件查询
应用背景:以货品为例,在基础数据中配置货品的判断规则,要根据这个规则筛选出符合条件的集合. 创建货品类 public class Product { public string Name { get; ...
- php第十九节课
JQUERY <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
- Light Oj - 1134 Be Efficient
题目传送门:Be Efficient 题意:输入n和m,然后输入有n个元素的一个序列,问有多少个子序列元素的和能整除m. 思路:求前缀和,利用一个前缀的一个定理求解. 前缀和的一个定理是:每次求的前缀 ...
- HTML学习笔记之标签基础
目录 1.基本标签 2.链接 3.图像 4.表格 5.列表 6.块与布局 1.基本标签 (1)标题与段落 标签 <h1> ~ <h6> 分别用于定义一至六级标题,标签 < ...
- vue数据绑定源码
思路分析 数据的双向绑定,就是数据变化了自动更新视图,视图变化了自动更新数据,实际上视图变化更新数据只要通过事件监听就可以实现了,并不是数据双向绑定的关键点.关键还是数据变化了驱动视图自动更新. 所有 ...
- c#获取文字全拼音
class Program { /// <summary> /// 获得拼音 /// </summary> /// <param name="str_Spell ...
- <embed> 标签
<embed> 标签定义嵌入的内容,比如插件. <embed quality="high" bgcolor="#FFF" wmode=&quo ...