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!的更多相关文章

  1. 【CF932E】Team Work(第二类斯特林数)

    [CF932E]Team Work(第二类斯特林数) 题面 洛谷 CF 求\(\sum_{i=1}^nC_{n}^i*i^k\) 题解 寒假的时候被带飞,这题被带着写了一遍.事实上并不难,我们来颓柿子 ...

  2. 【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]图的价 ...

  3. 【原创】Team Foundation Server 域环境迁移

    先说下此片博客的上下文:部门所在的业务被集团出售,因此我们所有的计算机和服务器都得重新命名,退出当前域加入新公司的域.对于PC和其他服务器,目前不存在太大问题.但是对于Team Foundation ...

  4. 【CF932E】Team Work

    题目 luogu的Romtejudge挂了我就当我过了吧 求 \[\sum_{i=1}^n\binom{n}{i}i^k\] 其实是个思博套路题,但是我现在这个水平还是刷刷板子吧 处理\(x^k\)是 ...

  5. 【draft】Team project :Bing dictionary plug-in

    课后~ 开会调研开会调研开会~ 在和Bing词典负责人进行了可行性的深入磋商后,我们对本次选题有了更加清晰的认识~困难好多~然而终于敲定了项目内容,我们的目标是这样一款神奇的插件,它帮你记录下新近查询 ...

  6. 【CodeForces】932 E. Team Work

    [题目]E. Team Work [题意]给定n和k,n个人中选择一个大小为x非空子集的代价是x^k,求所有非空子集的代价和%1e9+7.n<=10^9,k<=5000. [算法]斯特林反 ...

  7. 【例题5-6 UVA 540 】Team Queue

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用两个队列模拟就好. 记录某个队在不在队列里面. 模拟 [错的次数] 在这里输入错的次数 [反思] 在这里输入反思 [代码] #in ...

  8. 【POJ 2259】 Team Queue

    [题目链接] http://poj.org/problem?id=2259 [算法] 由题,一个人入队时,若这个人所在的组已经有人在队列中,则加入队列,否则排到队末 因此我们发现,这个队列一定是由连续 ...

  9. 【Uva 1627】Team them up!

    [Link]: [Description] 给你n个人; 有一些人之间有认识关系 a认识b,b不一定认识a 让你把这n个人分成两组 使得这两组中的每一组: 组内的人与人之间都相互认识. 并且,使得两组 ...

随机推荐

  1. 在ESXi 5.x之间冷迁移虚机

    试过几种不同的方法都不成功, 直接用VMware vCenter Converter Standalone Client迁移, 会出现task中的source与job中的source不一致的情况, 使 ...

  2. 方差分析 ANOVA

    来源: http://blog.sciencenet.cn/blog-479412-391481.html 方差分析是为了比较多个总体样本均数是否存在差别.该方法有RA.Fisher首先提出,后来由G ...

  3. JavaScript中清空数组的三种方式

    方式1,splice ? 1 2 3 var ary = [1,2,3,4]; ary.splice(0,ary.length); console.log(ary); // 输出 [],空数组,即被清 ...

  4. jQuery插件:跨浏览器复制jQuery-zclip

    jQuery-zclip是一个复制内容到剪贴板的jQuery插件,使用它我们不用考虑不同浏览器和浏览器版本之间的兼容问题.jQuery-zclip插件需要Flash的支持,使用时记得安装Adobe F ...

  5. Post model至Web Api

    Post model可以解决多动态性的参数至Web Api中去,获取数据或是创建数据.如果一个对象有很多字段,需要对每一个字段进行查询或是在创建对象时,我们可以考虑使用model来作参数.这样不必在控 ...

  6. JMS + jboss EAP 6.2 示例

    .Net中如果需要消息队列功能,可以很方便的使用微软自带的MSMQ,对应到Java中,这个功能就是JMS(Java Message Service). 下面以Jboss EAP 6.2环境,介绍一下基 ...

  7. java的守护线程与非守护线程

    最近重新研究Java基础知识,发现以前太多知识知识略略带过了,比较说Java的线程机制,在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) ,(PS:以 ...

  8. WP7开发 Sqlite数据库的使用 解决Unable open the database

    WP7本身不支持Sqlite数据库,但我们可以添加第三方组件让它支持Sqlite. 首先在项目中添加引用Community.CsharpSqlite.WP.dll,我会放后面让大家下载,我下了有几天了 ...

  9. (一)GATT Profile和GAP 简介(目前所有的BLE应用都基于GATT,所以也要了解是怎么一回事)-转发

    个人大总结:(先后顺序) 1.GAP协议定义多个角色(其中就有中心设备[GATT客户端](唯一)叫主设备||和外围设备[GATT服务端端](多个)也叫从设备). 2.先经过GAP协议,再有GATT协议 ...

  10. git的安装以及遇到的问题

    git安装以及遇到的问题 之前没有学会如何在Ubuntu下使用git,国庆放假回来后,完成了git的安装,补回来了之前没有学会的东西. 以下是我安装的过程以及遇到问题.解决问题的过程. 这次安装git ...