洛谷P2057 善意的投票】的更多相关文章

P2057 善意的投票 题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法,他们也可以投和自己本来意愿相反的票.我们定义一次投票的冲突数为好朋友之间发生冲突的总数加上和所有和自己本来意愿发生冲突的人数. 我们的问题就是,每位小朋友应该怎样投票,才能使冲突数最小? 输入输出格式 输入格式: 文件的第一行只有两个整数n,m,保证有2≤n≤300,1≤m≤n(n-1)/2.其中…
题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法,他们也可以投和自己本来意愿相反的票.我们定义一次投票的冲突数为好朋友之间发生冲突的总数加上和所有和自己本来意愿发生冲突的人数. 我们的问题就是,每位小朋友应该怎样投票,才能使冲突数最小? 输入输出格式 输入格式: 文件的第一行只有两个整数n,m,保证有2≤n≤300,1≤m≤n(n-1)/2.其中n代表总人数,m代表好朋…
题目链接 BZ链接 又是一道玄学的网络流题 我们这样建图: 对于同意观点1的原点向其连边,对于同一观点2点向汇点连边 然后如果两个人是朋友,就连一条双向边. 为什么这样是对的呢? 对于一个人来说,他要么放弃自己的观点,就是断掉自己和原点或汇点的边 或者说他放弃他的朋友(太表面了)断掉和他朋友相连的边 最后要使原点和汇点不连通(因为一个人不可能同意两个观点),所以我们要求的就是一个最小割 跑最大流的板子就好了 # include<iostream> # include<cstdio>…
洛谷P2057 [SHOI2007]善意的投票 题目链接 这道题是最小割的一个经典应用:划分集合. 题目的意思就是就是将所有的小朋友分为两个集合:同意睡觉和不同意睡觉的.不同的集合之间的边都要断开. 我们设\(S\)为投票结果为不想睡觉的小朋友(颜色为0)的集合:\(T\)为投票结果为想睡觉的小朋友(颜色为1)的集合.然后对于一个小朋友\(i\),设他的"颜色"为x,那么我们就连两条边\((S,i,[x!=0]),(i,T,[x!=1])\).第一条边表示该小朋友属于\(S\)集合,第…
P2057 [SHOI2007]善意的投票 题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法,他们也可以投和自己本来意愿相反的票.我们定义一次投票的冲突数为好朋友之间发生冲突的总数加上和所有和自己本来意愿发生冲突的人数. 我们的问题就是,每位小朋友应该怎样投票,才能使冲突数最小? 输入输出格式 输入格式: 文件的第一行只有两个整数n,m,保证有2≤n≤300,1≤m≤n…
题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法,他们也可以投和自己本来意愿相反的票.我们定义一次投票的冲突数为好朋友之间发生冲突的总数加上和所有和自己本来意愿发生冲突的人数. 我们的问题就是,每位小朋友应该怎样投票,才能使冲突数最小? 输入输出格式 输入格式: 文件的第一行只有两个整数n,m,保证有2≤n≤300,1≤m≤n(n-1)/2.其中n代表总人数,m代表好朋…
题目链接: https://www.luogu.org/problemnew/show/P2057 分析: 由0和1的选择我们直觉的想到0与S一堆,1与T一堆. 但是发现,刚开始的主意并不一定是最终的结果. 于是用源点S表示最终选择0的集合. 汇点T表示最终选择1的集合. 如果一个人P选择了0,那么S−>PS->PS−>P连一条流量为1的边,然后P−>TP->TP−>T连一条流量为0的边. 反之如果P选择了1,那么S−>PS->PS−>P连一条流量为0…
题目大意:有$n(n\leqslant300)$个人,每个人可以选择$0$或$1$,每个人最开始有意愿,有$m(m\leqslant\dfrac{n(n-1)}2)$对好朋友.定义一次的冲突数为好朋友之间发生冲突的总数加上和自己本来意愿发生冲突的人数. 题解:最小割,源点向原意愿为$0$的点连边,原意愿为$1$的向汇点连边,好朋友之间连边.但如果转换为最大流,好朋友之间要连双向边(不然一个人换选择了就会挂,其实想想,连单向边的话谁连谁?) 卡点:无 C++ Code: #include <alg…
正解:网络流 解题报告: 传送门! $umm$看到每个人要么0要么1就考虑最小割呗,,,? 然后贡献有两种?一种是违背自己的意愿,一种是和朋友的意愿违背了 所以考虑开一排点分别表示每个人,然后$S$表示0$T$表示1每个人先分别连向自己的意愿 然后再每个人向朋友连边 然后就欧克了,,,? #include<bits/stdc++.h> using namespace std; #define il inline #define gc getchar() #define ri register…
题目链接 也算水题一道吧,不过Round1感性理解一下就xjb建了个图,40 Round2仔细分析了一会,理性建了个图,90 然后分析了半天……改大数组就A了…… 从S到所有值为1的点连一条inf的边,从所有值为0的点向T连一条inf的边 然后对于每个值为1的点分析: 把点拆成A部和B部 改立场后自我谴责,从A部向B部连一条 改立场后本来同立场的朋友谴责,从$x_{A}$向$y_{B}$连一条 然后本来立场就不一样的朋友相信大家都会搞 然后最小割转最大流,dinic跑一下就A了 其实这题貌似不能…