传送门[洛谷]

自闭QAQ 什么玩意QAQ

不是很理解到底在干啥 问了巨佬以后大概是这个样子的

可以看出是最小割模型

对于每一个人 反悔的话就是代价+1

那么连接(s,i) (i,t)分别表示他最后选择赞同还是反对

根据初始状态来填代价

然后针对基友关系 他们之间连 代价为1的无向边

为什么是无向边呢 是因为 他们无论双方在哪个方向反对 只要不属于同一边的话就是有代价的

Edelweiss的PDF里还有这样的一个小补充

对于求一个函数 的最小值(其中

对于(二者取其一)(不同有代价)这样的模型我们也可以用类似的方法建立最小割来求解

比较有趣。附代码。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#define inf 20021225
#define ll long long
#define mxm 360010
#define mxn 310
using namespace std;struct edge{int to,lt,f;}e[mxm];
int in[mxn],s,t,cnt=1,dep[mxn];
void add(int x,int y,int f)
{e[++cnt].to=y;e[cnt].lt=in[x];e[cnt].f=f;in[x]=cnt;e[++cnt].to=x;e[cnt].lt=in[y];e[cnt].f=0;in[y]=cnt;
}
queue<int> que;
bool bfs()
{memset(dep,0,sizeof(dep));dep[s]=1;while(!que.empty())    que.pop();que.push(s);while(!que.empty()){int x=que.front();que.pop();for(int i=in[x];i;i=e[i].lt){int y=e[i].to;if(dep[y]||!e[i].f)    continue;dep[y]=dep[x]+1;que.push(y);if(y==t)   return true;}}return false;
}
int dfs(int x,int flow)
{if(x==t||!flow)  return flow;int cur=flow;for(int i=in[x];i;i=e[i].lt){int y=e[i].to;if(dep[y]==dep[x]+1&&e[i].f){int tmp=dfs(y,min(e[i].f,cur));cur-=tmp;e[i].f-=tmp;e[i^1].f+=tmp;if(!cur) return flow;}}dep[x]=-1;return flow-cur;
}
int dinic()
{int ans=0;while(bfs())ans+=dfs(s,inf);return ans;
}
int main()
{int n,m,x,y;while(scanf("%d%d",&n,&m)){if(n==0&&m==0)     break;s=n+1;t=s+1;memset(in,0,sizeof(in));cnt=1;for(int i=1;i<=n;i++){scanf("%d",&x);if(x)   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);}printf("%d\n",dinic());}return 0;
}

SPOJ1693 COCONUTS - Coconuts相关推荐

  1. spoj 1693 COCONUTS - Coconuts【最小割】

    s向所有信仰1的人连(s,i,1),所有信仰0的人连(i,t,1),对于朋友关系,连接双向边,流量为1.跑最大流的结果即为答案. 考虑这样做的意义.最小割就是把总点集分割为两个点集S,T,使得所有\( ...

  2. SP1693 COCONUTS - 题解

    SP1693 COCONUTS 题意: 几个士兵在投票,有支持与反对两种选择,每个人有自己的看法,但是他们有时也会为了支持朋友的看法而放弃自己的看法,请求出一种方案,使得违背自己初始看法的人数与看法不 ...

  3. 【斜率优化】Codechef July Challenge 2019——Hit the Coconuts

    前言 能够自己推出斜率优化的式子了...实属难得... 不过定义和实现都是参考了别人的博客的,╮(╯▽╰)╭... woc...写博客的时候发现自己推的式子的变量有点问题.../难受 题目 All s ...

  4. HDU - 5925 D - Coconuts

    D - Coconuts 题 意:给你一个R*C的矩阵,有K堵墙,问你有几个联通快,每个联通块的元素是多少? 数据范围: 1<=R,C<=1e9 0<=k<=200 输入样例: ...

  5. HDU 1346(Coconuts, Revisited)

    暴力破解即可,从 n-1 开始枚举人数,最先找到的满足要求的人数即为最大人数. #include <iostream> using namespace std;int main() {in ...

  6. SPOJ 1693 Coconuts

    SPOJ_1693 COCONUTS 对于每个人的选择一共有两种,根据他们最后的选择就可以将这些人分成两个集合,显然集合间如果有朋友形成的边的话是要删掉的,这样实际上就形成了一个割,对应的持不同意见的 ...

  7. UVa 616 - Coconuts, Revisited (数学)

    题意 第一个人平分椰子,然后取一堆,正好剩下一个给猴子.以此类推.到第二天正好分给所有人,问人最多有几个. 思路 我们可以枚举n-1的因子,再逐一检查是否符合条件. 代码 #include <s ...

  8. 【暴力+模拟】HDU-1346 Coconuts, Revisited

    注解 1.暴力模拟,从题目给定的数目减一开始枚举人数,直到人数只有1人为止.最先找到的满足题目要求的人数,就是答案. 代码 #include <iostream>using namespa ...

  9. 2016 长春东北赛---Coconuts(离散化+DFS)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5925 Problem Description TanBig, a friend of Mr. Frog ...

最新文章

  1. Spring---rabbitmq生产者配置
  2. .NET Framework终于开源了!
  3. ReentrantLock 源码分析
  4. 大神对飞控精准高度估计算法解读
  5. java多线程思维导图
  6. Docker 学习4 Docker容器虚拟化网络概述
  7. 编译GDAL支持MySQL
  8. 大数据可视化如何实现
  9. 计算机之间是如何进行通信的?;详解三次握手和四次挥手
  10. script标签的使用,从零开始
  11. Java实现支付功能代码
  12. clickhouse优缺点总结
  13. windows PC/SC 常用Scard前缀函数说明
  14. 推杆如妻子,发球木如情人,短铁如父母,球道木如朋友,长铁如兄弟
  15. remote-incorrect-username-or-password-access-token
  16. LeetCode--574. 当选者
  17. 成长的旅途,未知的邂逅
  18. 创维,彩电业的“技术咖”,能否赢得下一个十年?
  19. 2021-2022 ACM-ICPC Latin American Regional Programming Contest 题解
  20. 错觉图片生成实验 - 平行线(黑林错觉)

热门文章

  1. /java-php-python-ssm共享充电宝管理系统计算机毕业设计
  2. 【华为机试真题 Python实现】2023年1、2月高频机试题
  3. 怎么把jpg格式转换成pdf
  4. 《送你一朵小红花》:平凡生活的礼赞
  5. 2023年西安电子科技大学机械专业考研上岸经验分享
  6. 《视搭》一个完整的视频可视化搭建项目
  7. 杂谈云计算与网络革命
  8. 03-PS图层混合模式
  9. 教你用Python计算对量化交易至关重要的VWAP指标
  10. ---------------------------4.23-------------------------