正题

题目链接:https://www.luogu.com.cn/problem/CF1242C


题目大意

给出kkk个集合,现在从每个集合中取出一个数再把这些数放进每个集合里各一个,求能否使得所有集合的和相等,求方案。

保证所有集合中的出现过的数字都互不相同。

1≤k≤15,1≤ni≤5000,−109≤ai,j≤1091\leq k\leq 15,1\leq n_i\leq 5000,-10^9\leq a_{i,j}\leq 10^91≤k≤15,1≤ni​≤5000,−109≤ai,j​≤109


解题思路

显然的突破口肯定是数字互不相同。

首先和不变所以每个集合的最后的和应该都是知道的记为sumsumsum,记第iii个集合的和为sis_isi​。

考虑每个交换都是类似一个环形的结构,设bbb传给aaa,记传出的数字为xbx_bxb​和xax_axa​,那么有
sa−xa+xb=sum→xb=sum−sa+xas_a-x_a+x_b=sum\rightarrow x_b=sum-s_a+x_asa​−xa​+xb​=sum→xb​=sum−sa​+xa​
因为互不相同,每个数字看成一个点,那么数字xax_axa​连接的就是sum−sa+xasum-s_a+x_asum−sa​+xa​。

然后暴力找出所有没有经过重复集合数字的环,记录rSr_SrS​表示集合SSS的环的起点。

然后设fSf_SfS​表示能否拼出集合SSS,然后O(3k)O(3^k)O(3k)转移即可。

时间复杂度:O(k∑n+3k)O(k\sum n+3^k)O(k∑n+3k)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#define ll long long
#define mp(x,y) make_pair(x,y)
using namespace std;
const ll K=16;
ll k,sum,s[K],f[1<<(K-1)],r[1<<(K-1)];
map<ll,ll> v;pair<ll,ll> ans[K];
void solve(ll S){if(!S)return;ll x=r[f[S]]-1e9-1;ll y=x,q=v[x];do{y+=sum-s[q];ans[v[y]]=mp(y,q);q=v[y];}while(y!=x);solve(S^f[S]);return;
}
signed main()
{scanf("%lld",&k);for(ll i=1;i<=k;i++){ll m;scanf("%lld",&m);for(ll j=1,x;j<=m;j++)scanf("%lld",&x),s[i]+=x,v[x]=i;sum+=s[i];}if(sum%k!=0)return puts("No")&0;sum/=k;map<ll,ll>::iterator it=v.begin();while(it!=v.end()){ll x=(*it).first,p=(*it).second;ll S=0,q=p,y=x,flag=1;do{if(!q||(S>>q-1)&1){flag=0;break;}S|=(1<<q-1);y+=sum-s[q];q=v[y];}while(y!=x);if(flag)r[S]=x+1e9+1;++it;}ll MS=(1<<k);f[0]=-1;for(ll s=0;s<MS;s++){for(ll t=s;t;t=(t-1)&s)if(f[s^t]!=0&&r[t]){f[s]=t;break;}}if(!f[MS-1])return puts("No")&0;puts("Yes");solve(MS-1);for(ll i=1;i<=k;i++)printf("%lld %lld\n",ans[i].first,ans[i].second);return 0;
}

CF1242C-Sum Balance【状压dp】相关推荐

  1. Gym - 101853E E. Maximum Sum (状压DP)

    原题地址:https://codeforces.com/gym/101853/problem/E 题意:给出一个n*n的矩阵,矩阵中每一个格子都有一个权值,选择一个格子就能拿到当前的权值,但是同时就不 ...

  2. UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)

    整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...

  3. 【每日DP】day2、P1879 [USACO06NOV]Corn Fields G玉米地(状压DP模板题)难度⭐⭐⭐★

    昨天的每日DP我还在写01背包,今天就到状压DP了,真刺激. P1879 [USACO06NOV]Corn Fields G 题目链接 输入 2 3 1 1 1 0 1 0 输出 9 一道简单的状压D ...

  4. NowCoder110E Pocky游戏 状压DP

    传送门 题意:给出$N$个数和一个长为$M$.所有数在$[1,N]$范围之内的正整数序列$a_i$,求出这$N$个数的一种排列$p_1...p_N$使得$\sum\limits_{i=2}^M |p_ ...

  5. hdu 4739 状压DP

    这里有状态压缩DP的好博文 题目:题目比较神,自己看题目吧 分析: 大概有两种思路: 1.dfs,判断正方形的话可以通过枚举对角线,大概每次减少4个三角形,加上一些小剪枝的话可以过. 2.状压DP,先 ...

  6. AtCoder AGC035D Add and Remove (状压DP)

    题目链接 https://atcoder.jp/contests/agc035/tasks/agc035_d 题解 想了两小时憋出来一个状压DP,发现人家怎么空间才十几MB,原来暴力就行了... 考虑 ...

  7. BZOJ 2734 [HNOI2012]集合选数 (状压DP、时间复杂度分析)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2734 题解 嗯早就想写的题,昨天因为某些不可告人的原因(大雾)把这题写了,今天再来写题解 ...

  8. CF-1238E. Keyboard Purchase (状压dp)

    CF-1238E. Keyboard Purchase (状压dp) 题目链接 题意 长度nnn的字符串为排成一行,这个字符串由mmm个字符组成,你需要确定一种排列方式使得这个字符串的花费最少. 花费 ...

  9. POJ - 1185 炮兵阵地(状压dp)

    题目链接:点击查看 题目大意:中文题,题意很清晰,不多赘述 题目分析:最基础的状压dp,需要考虑如何转移,因为每一个炸弹所涉及的范围都是上下左右两个格子,我们可以从第一行开始向下转移,这样某一行的状态 ...

  10. BZOJ.3058.四叶草魔杖(Kruskal 状压DP)

    题目链接 \(2^{16}=65536\),可以想到状压DP.但是又有\(\sum A_i\neq 0\)的问题.. 但是\(2^n\)这么小,完全可以枚举所有子集找到\(\sum A_i=0\)的, ...

最新文章

  1. 键盘码 ascii码
  2. 面试官:连YOLO都搞不定,是自己走还是我送你
  3. Facebook推开源软件平台ParlAI,能否解决机器人灵魂缺失问题?
  4. boost::gregorian模块实现月末日的测试程序
  5. Docker系列之.NET Core入门(三)
  6. 浅析Entity Framework Core中的并发处理
  7. 云+X案例展 | 民生类:基于AWS PaaS构建基础集团企业级中台
  8. 计算机里什么文件无法删除,电脑上的文件删不掉怎么办
  9. windows离线安装grunt_chrome火狐离线安装包下载
  10. 电动汽车告急?特斯拉、蔚来之后 一辆比亚迪新能源车突然自燃...
  11. 中英文对照 —— 哲学
  12. python 一些练习 (初学)
  13. linux一款不错的linux系统清理工具
  14. html flash背景透明写法,如何让Flash不遮挡HTML div元素的技巧
  15. 【转】MMORPG开发入门【强力推荐,写的很好】
  16. laravel实现短信验证码功能
  17. 字节跳动为什么选用Flutter:并非跨平台终极之选,但它可能是不一样的未来
  18. 虚拟机批量克隆工具_如何使用老毛桃winpe进行克隆磁盘?
  19. 计算机毕业设计ssm游泳馆管理平台
  20. 5G工业路由器与4G无线路由器各自有何优缺点

热门文章

  1. Oracle常用知识总结
  2. java语言程序设计第六章答案_Java语言程序设计(邵丽萍编著)第六章.doc
  3. python pdf 图片_第一节:python提取PDF文档中的图片
  4. lisp正负调换_坐标提取lisp程序
  5. 苹果手机透明桌面_原来苹果手机辨别真假很容易!查看桌面1个图标,就能轻松分辨...
  6. 超详细图解!【MySQL进阶篇】SQL优化-索引-存储引擎
  7. php-fpm 超时,PHP超时的坑
  8. labelme 语义分割数据集_labelme安装以及使用教程——自制语义分割数据集(保姆级示范)...
  9. android ble status,Android BLE peripheral disconnects with status code BLE_HCI_INSTANT_PASSED(0x28)
  10. java跳转画面后画面白了_如何跳转指定页面后再次跳转到另一页面或原来的页面...