【poj1112】 Team Them Up!
http://poj.org/problem?id=1112 (题目链接)
题意
将n个人分成两组,每个人有认识的人,要求每一组中的人互相认识,并且两组人数之差尽可能的小,求如何分。
Solution
二分图染色的裸题,比较麻烦的是dp统计答案。。下午急着去打球,照着hzwer的程序码了一遍。
代码
// poj1112
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
#define LL long long
#define MOD 100000000
#define inf 2147483640
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std; const int maxn=200;
struct edge {int to,next;}e[maxn*maxn];
struct data {int x,y;}s[maxn];
vector<int> id[maxn][2],ans[2];
int f[maxn][maxn<<1],g[maxn][maxn<<1],head[maxn],c[maxn],ss[2],b[maxn];
int cnt,num,n; void link(int u,int v) {
e[++cnt].to=v;e[cnt].next=head[u];head[u]=cnt;
e[++cnt].to=u;e[cnt].next=head[v];head[v]=cnt;
}
bool color(int x,int f) {
c[x]=f;ss[f]++;
id[num][f].push_back(x);
for (int i=head[x];i;i=e[i].next) {
if (c[e[i].to]==-1) {
if (!color(e[i].to,f^1)) return 0;
}
else if (c[e[i].to]==f) return 0;
}
return 1;
}
void print(int k,int x) {
if (!k) return;
int t=g[k][x];
for (int i=0;i<2;i++)
for (int j=0;j<id[k][i].size();j++)
ans[i^t].push_back(id[k][i][j]);
print(k-1,x+id[k][t].size()-id[k][t^1].size());
}
int main() {
scanf("%d",&n);
memset(c,-1,sizeof(c));
for (int x,i=1;i<=n;i++) {
for (int j=1;j<=n;j++) b[j]=0;
while (scanf("%d",&x)!=EOF && x) b[x]=1;
for (int j=1;j<=n;j++) if (!b[j] && j!=i) link(i,j);
}
for (int i=1;i<=n;i++) if (c[i]==-1) {
ss[0]=ss[1]=0;num++;
if (!color(i,0)) {printf("No solution");return 0;}
s[num]=(data){ss[0],ss[1]};
}
f[0][100]=1;
for (int i=1;i<=num;i++)
for (int j=0;j<=200;j++) if (f[i-1][j]) {
int x=s[i].x,y=s[i].y;
f[i][j+x-y]=1;
f[i][j+y-x]=1;
g[i][j+x-y]=1;
g[i][j+y-x]=0;
}
for (int i=0;i<=100;i++) if (f[num][100-i]) {
print(num,i+100);
break;
}
printf("%d ",ans[0].size());
for (int i=0;i<ans[0].size();i++) printf("%d ",ans[0][i]);
printf("\n%d ",ans[1].size());
for (int i=0;i<ans[1].size();i++) printf("%d ",ans[1][i]);
return 0;
}
【poj1112】 Team Them Up!的更多相关文章
- 【CF932E】Team Work(第二类斯特林数)
[CF932E]Team Work(第二类斯特林数) 题面 洛谷 CF 求\(\sum_{i=1}^nC_{n}^i*i^k\) 题解 寒假的时候被带飞,这题被带着写了一遍.事实上并不难,我们来颓柿子 ...
- 【CF932E】Team Work/【BZOJ5093】图的价值 数学+NTT
[CF932E]Team Work 题意:求$\sum\limits_{i=1}^nC_n^ii^k$,答案模$10^9+7$.$n\le 10^9,k\le 5000$. [BZOJ5093]图的价 ...
- 【原创】Team Foundation Server 域环境迁移
先说下此片博客的上下文:部门所在的业务被集团出售,因此我们所有的计算机和服务器都得重新命名,退出当前域加入新公司的域.对于PC和其他服务器,目前不存在太大问题.但是对于Team Foundation ...
- 【CF932E】Team Work
题目 luogu的Romtejudge挂了我就当我过了吧 求 \[\sum_{i=1}^n\binom{n}{i}i^k\] 其实是个思博套路题,但是我现在这个水平还是刷刷板子吧 处理\(x^k\)是 ...
- 【draft】Team project :Bing dictionary plug-in
课后~ 开会调研开会调研开会~ 在和Bing词典负责人进行了可行性的深入磋商后,我们对本次选题有了更加清晰的认识~困难好多~然而终于敲定了项目内容,我们的目标是这样一款神奇的插件,它帮你记录下新近查询 ...
- 【CodeForces】932 E. Team Work
[题目]E. Team Work [题意]给定n和k,n个人中选择一个大小为x非空子集的代价是x^k,求所有非空子集的代价和%1e9+7.n<=10^9,k<=5000. [算法]斯特林反 ...
- 【例题5-6 UVA 540 】Team Queue
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用两个队列模拟就好. 记录某个队在不在队列里面. 模拟 [错的次数] 在这里输入错的次数 [反思] 在这里输入反思 [代码] #in ...
- 【POJ 2259】 Team Queue
[题目链接] http://poj.org/problem?id=2259 [算法] 由题,一个人入队时,若这个人所在的组已经有人在队列中,则加入队列,否则排到队末 因此我们发现,这个队列一定是由连续 ...
- 【Uva 1627】Team them up!
[Link]: [Description] 给你n个人; 有一些人之间有认识关系 a认识b,b不一定认识a 让你把这n个人分成两组 使得这两组中的每一组: 组内的人与人之间都相互认识. 并且,使得两组 ...
随机推荐
- ubuntu12.04禁止单用户本地无密码root登录
1)grub-mkpasswd-pbkdf2 拿到类似grub.pbkdf2.sha512.10000.C093FE6825CDCC2F84934ABC406445E92EE098733C60E6D1 ...
- 教你如何调用百度编辑器ueditor的上传图片、上传文件等模块
出于兴趣爱好,前段时间自己尝试写了一个叫simple的cms,里面使用了百度ueditor编辑器,发现它的多图片上传模块很不错,用起来很方便,又可以选择已经上传好的图片.正好我又是个懒人,发现有现成的 ...
- Easyui Tree方法扩展 - getLevel(获取节点级别)
Easyui Tree一直就没有提供这个方法,以前没有用到,所以一直没怎么在意,这次自己用到了,顺便扩展了一个方法,分享给大家. $.extend($.fn.tree.methods, { getLe ...
- Validate Binary Search Tree
Validate Binary Search Tree Given a binary tree, determine if it is a valid binary search tree (BST) ...
- “Word自动更改后的内容保存到通用文档模板上。是否加载该模板?“的解决办法
在win7系统下,Word2010出现了不能正常关闭.打开一个已有word文档,点击右上角关闭按钮后,先提示"word已停止工作,windows正在检查该问题的解决方案",随后提示 ...
- docker 镜像导入导出
导出(Export) Export命令用于持久化容器(不是镜像).所以,我们就需要通过以下方法得到容器ID: sudo docker ps -a 接着执行导出: sudo docker export ...
- 为什么Javascript中的基本类型能调用方法?
我们从一道笔试题说起: var str = 'string'; str.pro = 'hello'; console.log(str.pro + 'world'); 输出啥?要理解这个问题,我们得从头 ...
- 开源磁力搜索爬虫dhtspider原理解析
开源地址:https://github.com/callmelanmao/dhtspider. 开源的dht爬虫已经有很多了,有php版本的,python版本的和nodejs版本.经过一些测试,发现还 ...
- FPGA中的INOUT接口和高阻态
除了输入输出端口,FPGA中还有另一种端口叫做inout端口.如果需要进行全双工通信,是需要两条信道的,也就是说需要使用两个FPGA管脚和外部器件连接.但是,有时候半双工通信就能满足我们的要求,理论上 ...
- java list随机打乱
java list随机打乱package arrlist; import java.util.ArrayList; import java.util.Collections; import java. ...