SPOJ1693 COCONUTS - Coconuts
传送门[洛谷]
自闭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相关推荐
- spoj 1693 COCONUTS - Coconuts【最小割】
s向所有信仰1的人连(s,i,1),所有信仰0的人连(i,t,1),对于朋友关系,连接双向边,流量为1.跑最大流的结果即为答案. 考虑这样做的意义.最小割就是把总点集分割为两个点集S,T,使得所有\( ...
- SP1693 COCONUTS - 题解
SP1693 COCONUTS 题意: 几个士兵在投票,有支持与反对两种选择,每个人有自己的看法,但是他们有时也会为了支持朋友的看法而放弃自己的看法,请求出一种方案,使得违背自己初始看法的人数与看法不 ...
- 【斜率优化】Codechef July Challenge 2019——Hit the Coconuts
前言 能够自己推出斜率优化的式子了...实属难得... 不过定义和实现都是参考了别人的博客的,╮(╯▽╰)╭... woc...写博客的时候发现自己推的式子的变量有点问题.../难受 题目 All s ...
- HDU - 5925 D - Coconuts
D - Coconuts 题 意:给你一个R*C的矩阵,有K堵墙,问你有几个联通快,每个联通块的元素是多少? 数据范围: 1<=R,C<=1e9 0<=k<=200 输入样例: ...
- HDU 1346(Coconuts, Revisited)
暴力破解即可,从 n-1 开始枚举人数,最先找到的满足要求的人数即为最大人数. #include <iostream> using namespace std;int main() {in ...
- SPOJ 1693 Coconuts
SPOJ_1693 COCONUTS 对于每个人的选择一共有两种,根据他们最后的选择就可以将这些人分成两个集合,显然集合间如果有朋友形成的边的话是要删掉的,这样实际上就形成了一个割,对应的持不同意见的 ...
- UVa 616 - Coconuts, Revisited (数学)
题意 第一个人平分椰子,然后取一堆,正好剩下一个给猴子.以此类推.到第二天正好分给所有人,问人最多有几个. 思路 我们可以枚举n-1的因子,再逐一检查是否符合条件. 代码 #include <s ...
- 【暴力+模拟】HDU-1346 Coconuts, Revisited
注解 1.暴力模拟,从题目给定的数目减一开始枚举人数,直到人数只有1人为止.最先找到的满足题目要求的人数,就是答案. 代码 #include <iostream>using namespa ...
- 2016 长春东北赛---Coconuts(离散化+DFS)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5925 Problem Description TanBig, a friend of Mr. Frog ...
最新文章
- Spring---rabbitmq生产者配置
- .NET Framework终于开源了!
- ReentrantLock 源码分析
- 大神对飞控精准高度估计算法解读
- java多线程思维导图
- Docker 学习4 Docker容器虚拟化网络概述
- 编译GDAL支持MySQL
- 大数据可视化如何实现
- 计算机之间是如何进行通信的?;详解三次握手和四次挥手
- script标签的使用,从零开始
- Java实现支付功能代码
- clickhouse优缺点总结
- windows PC/SC 常用Scard前缀函数说明
- 推杆如妻子,发球木如情人,短铁如父母,球道木如朋友,长铁如兄弟
- remote-incorrect-username-or-password-access-token
- LeetCode--574. 当选者
- 成长的旅途,未知的邂逅
- 创维,彩电业的“技术咖”,能否赢得下一个十年?
- 2021-2022 ACM-ICPC Latin American Regional Programming Contest 题解
- 错觉图片生成实验 - 平行线(黑林错觉)