1156

求出每个联通块的黑白块数 然后再背包 二维的背包 要保证每个块都得取一个

写的有些乱。。

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<stdlib.h>
#include<algorithm>
#include<vector>
using namespace std;
vector<int>ed[];
int x,y,flag,g,f[],o[],n,q[];
int co[],a[],b[],dp[][];
int vis[],p[][][];
void dfs(int u,int c)
{
int i;
if(co[u]==)
{
x++;
p[g][x][] = u;
}
else
{
y++;
p[g][y][] = u;
}
for(i = ; i < (int)ed[u].size() ; i++)
{
int v = ed[u][i];
if(co[v])
{
if(co[v]!=-c)
{
flag = ;
return ;
}
}
else
{
co[v] = -c;
dfs(v,-c);
}
}
}
void dfs2(int s,int v)
{
if(flag) return ;
int i;
if(s==)
{
if(v==)
{
flag = ;
return ;
}
else
return ;
}
for(i = ; i <= g ;i++)
{
if(!vis[i]&&s-a[i]>=&&dp[v-][s-a[i]])
{
f[i] = ;
vis[i] = ;
dfs2(s-a[i],v-);
if(flag) return;
f[i] = ;
vis[i] = ;
}
if(!vis[i]&&s-b[i]>=&&dp[v-][s-b[i]])
{
f[i] = ;
vis[i] = ;
dfs2(s-b[i],v-);
if(flag) return ;
vis[i] = ;
f[i] = ;
}
}
}
int main()
{
int m,i,j;
scanf("%d%d",&n,&m);
for(i = ; i <= m ; i++)
{
int u,v;
scanf("%d%d",&u,&v);
ed[u].push_back(v);
ed[v].push_back(u);
}
for(i = ; i <= *n ; i++)
{
if(!co[i])
{
g++;x=;y=;
co[i] = ;
dfs(i,);
a[g] = x;
b[g] = y;
}
if(flag)
break;
}
if(flag)
{
puts("IMPOSSIBLE\n");
return ;
}
else
{
dp[][] = ;
for(i = ; i <= g ; i++)
for(int k = g; k >= ; k--)
{
for(j = n ; j >= ; j--)
{
if(j>=a[i])
dp[k][j] = max(dp[k][j],dp[k-][j-a[i]]);
if(j>=b[i])
dp[k][j] = max(dp[k][j],dp[k-][j-b[i]]);
}
}
if(!dp[g][n])
puts("IMPOSSIBLE");
else
{
dfs2(n,g);
for(i = ; i <= g ; i++)
if(f[i])
{
if(f[i]==)
for(j = ; j <= a[i] ; j++)
{
printf("%d ",p[i][j][]);
q[p[i][j][]] = ;
}
else
for(j = ; j <= b[i] ; j++)
{
printf("%d ",p[i][j][]);
q[p[i][j][]] = ;
}
}
puts("");
for(i = ; i <= *n ;i++)
if(!q[i])
printf("%d ",i);
puts("");
}
}
return ;
}

1156. Two Rounds(dfs+背包)的更多相关文章

  1. ural 1156. Two Rounds

    1156. Two Rounds Time limit: 2.0 secondMemory limit: 64 MB There are two rounds in the Urals Champio ...

  2. 【BZOJ】1673: [Usaco2005 Dec]Scales 天平(dfs背包)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1673 bzoj翻译过来的c<=230不忍吐槽......................... ...

  3. P1021 邮票面值设计(dfs+背包dp)

    P1021 邮票面值设计 题目传送门 题意: 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15N+K≤15)种邮票的情况下 (假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大 ...

  4. 【bzoj4800】: [Ceoi2015]Ice Hockey World Championship dfs

    [bzoj4800]: [Ceoi2015]Ice Hockey World Championship N<=40所以如果直接dfs背包会TLE 考虑Meet-in-the-middle 如果把 ...

  5. Codeforce 221 div1

    A 只要打个表就能发现,1,6,8,9的所有排列就可以产生0~6的余数了... 所以...走不下去的时候一定要打表... #define rep(i,n) for(int i=0 ; i<(n) ...

  6. codevs2894、2837、1669、2503、3231

    6.25动态规划之背包回顾 2894 Txx考试  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description Txx是一个 ...

  7. 【NOIP2018】 游记

    All ended? [day 0] 一点感觉没有,不过翘掉了早上的课(当然还有前三周的课),然后刚想睡一会儿,就被通知要上车了/难受 在车上玩了一会儿早上下的Super Mario(主要是早上刷了一 ...

  8. hdu3448 01背包+dfs

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3448 Description 0/1 bag problem should sound f ...

  9. POJ3628 Bookshelf 2(01背包+dfs)

    Bookshelf 2 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8745   Accepted: 3974 Descr ...

随机推荐

  1. Windows下访问VMware中tomcat

    很多人都可能和我一样,运行在虚拟机上,开发时在windows上进行. 在linux上运行tomcat,并且windows中能ping通虚拟机,但就不能通过虚拟机ip访问到8080端口上的tomcat, ...

  2. android 使某个控件获取焦点

    比如让某个edittext获取焦点,可以调用edittext.requestfocuse()的方法

  3. windows 2012上配置好iis后出现不能访问的现象

    新买的阿里云服务器,今天把环境弄了一下,安装iis之后不能访问网页 原因:没有安装asp.net 找到服务器管理器->(右上角)添加角色和功能->下一步下一步...找到应用程序 -> ...

  4. c++ std::bitset

    转载自 作用:及  64位 移位  取或  用64个位存储64个位,取 或 merge . 然后查索引即知道id是否存在~~ 目标:省空间. #include <iostream> #in ...

  5. Hibernate各种主键生成策略与配置详解【附1--<generator class="foreign">】

    1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...

  6. DevExpress控件使用系列--ASPxTreeList

      控件功能 结合列表控件及树控件的优点,在列表控件中实现类型树的多层级操作 官方说明 http://documentation.devexpress.com/#AspNet/clsDevExpres ...

  7. 关于StringBuilder

    写在前面的话 很久没有更新博客了,来上海实习身边的一切波动挺大的,还好我走过来了,博客园:一路有你! StringBuilder 相信大家对StringBuilder类型一定不陌生,我们Coding经 ...

  8. Binary Search Tree In-Order Traversal Iterative Solution

    Given a binary search tree, print the elements in-order iteratively without using recursion. Note:Be ...

  9. hdoj 1879 继续畅通工程

    继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  10. POJ 2499 Binary Tree(二叉树,找规律)

    题意:给一个这样的二叉树,每个节点用一对数(a,b)表示,根节点为(1,1).设父亲为(a,b),左儿子(a+b,b),右儿子(a,a+b). 给几组数据,(i,j),求从根节点到(i,j)节点需要向 ...