【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个人分成两组 使得这两组中的每一组: 组内的人与人之间都相互认识. 并且,使得两组 ...
随机推荐
- linux addr2line 定位so库崩溃位置
在Linux下写C/C++程序的程序员,时常与Core Dump相见.在内存越界访问,收到不能处理的信号,除零等错误出现时,我们精心或不精心写就的程序就直接一命呜呼了,Core Dump是Linux仁 ...
- Android -- Adapter
体系 public interface Adapter----0层(表示继承体系中的层次) public interface ExpandableListAdapter---(无所谓层次因为没有其他 ...
- 如何在batch脚本中嵌入python代码
老板叫我帮他测一个命令在windows下消耗的时间,因为没有装windows那个啥工具包,没有timeit那个命令,于是想自己写一个,原理很简单: REM timeit.bat echo %TIME% ...
- 【Android测试】【随笔】Android Studio环境搭建
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5482778.html 随着Android Studio的推 ...
- Bootstrap系列 -- 40. 导航条二级菜单
在导航条中添加二级菜单也非常简单 <div class="navbar navbar-default" role="navigation"> < ...
- redis入门配置
简介: Redis是Nosql中比较出名的,分布式数据库缓存,提升相应的速度,降低对数据库的访问! Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,(永久 ...
- fstream 中判断是否成功打开文件
from: http://blog.csdn.NET/zhtsuc/article/details/2938614 关于C++ fstream的一个容易使用出错的地方 关于c++ 中 文件流的两个类, ...
- Android中this、super的区别
转载:http://blog.csdn.net/dyllove98/article/details/8826232 在Java中,this通常指当前对象,super则指父类的.当你想要引用当前对象的某 ...
- 1018MYSQL数据迁移到SQLSERVER
-- 第一步利用MYSQL将数据结果的脚本迁移出来-- 第二步利用POWERDESGINER的反向功能,将脚本生成为物理模型 FILE-REVERSE DATEBASE -- 第三步将物理模型生成SQ ...
- springMVC学习--RESTful支持
简介 RESTful架构,就是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用.RESTful(即Representational State T ...