昨天晚上看的题。

说实话,我一眼就看出了是二分图,再一眼就看出了是二分图+dp(01背包)。但悲剧的是我一眼看出的算法是正确的,但我总以为它是错误的,浪费了很长时间像其他算法(TAT)。

今天终于把代码打了出来,刚开始01背包的优化后来发现是错误的,忘记删了,导致WA一次。吃晚饭时突然发现了,便AC。

2013-6-29

代码:

#include<cstdio>

#include<cstring>

using namespace std;

int n,col[101],w[202],m=0,dp[101][101],pre[101][101];

bool map[101][101]={0},vis[202]={0},f=0;

void dfs(int x,int cur){

vis[x]=1,col[x]=2*m+cur;

w[2*m+cur]++;

for(int i=0;i<n;i++){

if(map[x][i] && vis[i] && col[x]==col[i]){

f=1;

return;

}

if(map[x][i] && !vis[i]){

dfs(i,1^cur);

if(f)return;

}

}

return;

}

int max(int x,int y){

return (x>y)?x:y;

}

int min(int x,int y){

return (x<y)?x:y;

}

int main(){

scanf("%d",&n);

for(int i=0;i<n;i++){

int x;

while(scanf("%d",&x),x!=0)

map[i][--x]=1;

}

for(int i=0;i<n;i++)

for(int j=0;j<i;j++)

if(map[i][j]*map[j][i]==0 && i!=j)map[i][j]=map[j][i]=1;else map[i][j]=map[j][i]=0;

for(int i=0;i<n;i++)if(!vis[i]){

dfs(i,0);

m++;

}

if(f){

printf("No solution\n");

return 0;

}

m*=2;

memset(dp[0],-1,sizeof(dp[0]));

memset(vis,0,sizeof(vis));

dp[0][0]=0;

for(int i=1;i<=m;i+=2)

for(int j=0;j<=n;j++){       //这里我一开始打成了for(int j=min(w[i-1],w[i]);j<=n;j++)

int a=(i+1)/2;

dp[a][j]=-1;pre[a][j]=-1;

if(j>=w[i-1] && dp[a-1][j-w[i-1]]+w[i-1]>max(dp[a][j],w[i-1]-1))dp[a][j]=max(dp[a][j],dp[a-1][j-w[i-1]]+w[i-1]),pre[a][j]=2;

if(j>=w[i] && dp[a-1][j-w[i]]+w[i]>max(dp[a][j],w[i]-1))dp[a][j]=max(dp[a][j],dp[a-1][j-w[i]]+w[i]),pre[a][j]=1;

}

int j;

for(j=n/2;j>=0 && dp[m/2][j]==-1;j--);

if(j<0){

printf("No solution\n");

return 0;

}

int j1=j;

for(int i=m/2;i>0;i--)

vis[i*2-pre[i][j]]=1,j-=w[i*2-pre[i][j]];

printf("%d",j1);

for(int i=0;i<n;i++)

if(vis[col[i]])printf(" %d",i+1);

printf("\n");

printf("%d",n-j1);

for(int i=0;i<n;i++)

if(!vis[col[i]])printf(" %d",i+1);

printf("\n");

return 0;

}

poj 1112的更多相关文章

  1. 图论+dp poj 1112 Team Them Up!

    题目链接: http://poj.org/problem?id=1112 题目大意: 有编号为1~n的n个人,给出每个人认识的人的编号,注意A认识B,B不一定认识A,让你将所有的人分成两组,要求每组的 ...

  2. POJ 1112 Team Them Up! 二分图判定+01背包

    题目链接: http://poj.org/problem?id=1112 Team Them Up! Time Limit: 1000MSMemory Limit: 10000K 问题描述 Your ...

  3. 【POJ 1112】Team Them Up!(二分图染色+DP)

    Description Your task is to divide a number of persons into two teams, in such a way, that: everyone ...

  4. 【转载】ACM总结——dp专辑

    感谢博主——      http://blog.csdn.net/cc_again?viewmode=list       ----------  Accagain  2014年5月15日 动态规划一 ...

  5. 【DP专辑】ACM动态规划总结

    转载请注明出处,谢谢.   http://blog.csdn.net/cc_again?viewmode=list          ----------  Accagain  2014年5月15日 ...

  6. dp专题训练

    ****************************************************************************************** 动态规划 专题训练 ...

  7. 【DP专辑】ACM动态规划总结(转)

    http://blog.csdn.net/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少,多元性强, ...

  8. dp有哪些种类

    dp有哪些种类 一.总结 一句话总结: 二.dp动态规划分类详解 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少,多元性强,主要考察思维能力.建模抽象能力.灵活度. * ...

  9. (转)dp动态规划分类详解

    dp动态规划分类详解 转自:http://blog.csdn.NET/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间 ...

随机推荐

  1. 第50课 关于对话框(About)

    1. 关于对话框 (1)标准的桌面应用软件都有一个关于对话框 (2)关于对话框用于标识软件自身的信息.如logo.项目名.版本号.开发者信息.版权信息.联系方式等. 2. 经典设计方案 3. 项目持续 ...

  2. kettle启动“Error: could not create the Java Virtual Machine”

    因为我的操作系统是32bit,而Ketttle的Spoon脚本中,默认是PENTAHO_DI_JAVA_OPTIONS="-Xms1024m" "-Xmx2048m&qu ...

  3. [No000071]C# 进制转换(二进制、十六进制、十进制互转)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. moosefs的安装使用及遇到的问题

     一.获取源码安装包 到官网下载最新版本moosefs: https://moosefs.com/download/sources-archive-3-0.html到官网下载最新版本fuse源码 ht ...

  5. The week in .NET - 1/12/2015

    On.NET Last week, we had Mads Torgersen on the show to talk about language design in general, and C# ...

  6. js/jquery的应用

    1.JS限制文本框只能输入整数或小数 <script language="JavaScript" type="text/javascript"> f ...

  7. 文法分类的python实现

    #-*-coding:utf-8-*- G = raw_input("提示输入文法:"); #G为文法 S = G[2] #识别符号S Vn = raw_input("提 ...

  8. ASP.NET SessionState 解惑

    踩坑 近日在对一个ASP.NET WEBFORM项目进行调优过程中,偶然发现页面POSTBACK事件是串行处理的,甚至不同页面的请求都是串行处理的(一个页面加载完毕后,才开始加载第二个页面).但是网站 ...

  9. Asp.Net MVC<七>:Model

    Model 指ViewModel ,其作用: 用于目标Action的参数绑定 用于View呈现 Model元数据则是对ViewModel数据类型的描述,其作用在于控制作为Model的数据对象在View ...

  10. 没有为 COM 互操作注册程序集 请使用 regasm.exe /tlb 注册该程序集——解决办法

    错误现象: 错误 6 没有为 COM 互操作注册程序集“DevExpress.Utils.v13.1, Version=13.1.7.0, Culture=neutral, PublicKeyToke ...