POJ 1636 DFS+DP
思路: 
先搜索出来如果选这个点  其它哪些点必须选 
跑个背包就好了
//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 66666
int xx,yy,v[N],next[N],first[1004],tot,top,vis[1004],cases,m,r,f[1005][1005];
struct Stk{int x,y;}s[N];
void add(int x,int y){v[tot]=y,next[tot]=first[x],first[x]=tot++;}
void dfs(int x){
    if(x<=m)s[top].x++;
    else s[top].y++;
    for(int i=first[x];~i;i=next[i])
        if(!vis[v[i]])
            vis[v[i]]=1,dfs(v[i]);
}
int main(){
    scanf("%d",&cases);
    while(cases--){
        memset(f,0,sizeof(f));
        memset(vis,0,sizeof(vis));
        memset(first,-1,sizeof(first));
        tot=top=0;
        scanf("%d%d",&m,&r);
        while(r--)scanf("%d%d",&xx,&yy),add(xx,yy+m),add(yy+m,xx);
        for(int i=1;i<=m*2;i++)
            if(!vis[i])
                vis[i]=1,top++,s[top].x=s[top].y=0,dfs(i);
        f[0][0]=1;
        for(int i=1;i<=top;i++)
            for(int j=m;j>=s[i].x;j--)
                for(int k=m;k>=s[i].y;k--)
                    f[j][k]=f[j][k]|f[j-s[i].x][k-s[i].y];
        for(int i=m/2;i>=0;i--)
            if(f[i][i]){
                printf("%d\n",i);
                break;
            }
    }
}POJ 1636 DFS+DP的更多相关文章
- POJ 1636 Prison rearrangement DFS+0/1背包
		题目链接: id=1636">POJ 1636 Prison rearrangement Prison rearrangement Time Limit: 3000MS Memor ... 
- Fire (poj 2152 树形dp)
		Fire (poj 2152 树形dp) 给定一棵n个结点的树(1<n<=1000).现在要选择某些点,使得整棵树都被覆盖到.当选择第i个点的时候,可以覆盖和它距离在d[i]之内的结点,同 ... 
- dfs+dp思想的结合------hdu1078
		首先是题目的意思: 从一个正方形的0,0点开始走,只能横着走,竖着走,最多走k步,下一个点的数一定要比当前这个点的值大,每走一步,就加上下一个点的数据,问数据最大能有多少. 首先遇到这种题目,走来走去 ... 
- HDU1978How Many Ways 记忆化dfs+dp
		/*记忆化dfs+dp dp[i][j]代表达到这个点的所有路的条数,那么所有到达终点的路的总数就是这dp[1][1]加上所有他所能到达的点的 所有路的总数 */ #include<stdio. ... 
- 记忆化搜索(DFS+DP) URAL 1223 Chernobyl’ Eagle on a Roof
		题目传送门 /* 记忆化搜索(DFS+DP):dp[x][y] 表示x个蛋,在y楼扔后所需要的实验次数 ans = min (ans, max (dp[x][y-i], dp[x-1][i-1]) + ... 
- 记忆化搜索(DFS+DP) URAL 1501 Sense of Beauty
		题目传送门 /* 题意:给了两堆牌,每次从首部取出一张牌,按颜色分配到两个新堆,分配过程两新堆的总数差不大于1 记忆化搜索(DFS+DP):我们思考如果我们将连续的两个操作看成一个集体操作,那么这个操 ... 
- 【cf1111】C. Creative Snap (dfs+dp)
		传送门 简单的dfs+dp即可解决.根本不用动态开点 /* * Author: heyuhhh * Created Time: 2019/11/13 10:12:42 */ #include < ... 
- DFS(DP)---POJ 1014(Dividing)
		原题目:http://poj.org/problem?id=1014 题目大意: 有分别价值为1,2,3,4,5,6的6种物品,输入6个数字,表示相应价值的物品的数量,问一下能不能将物品分成两份,是两 ... 
- POJ 3249 Test for Job (dfs + dp)
		题目链接:http://poj.org/problem?id=3249 题意: 给你一个DAG图,问你入度为0的点到出度为0的点的最长路是多少 思路: 记忆化搜索,注意v[i]可以是负的,所以初始值要 ... 
随机推荐
- 程序设计基石与实践系列之编写高效的C程序与C代码优化
			原文出处: codeproject:Writing Efficient C and C Code Optimization 虽然对于优化C代码有非常多有效的指导方针,可是对于彻底地了解编译器和你工作的 ... 
- 关于functioncharts饼状图篇
			关于functioncharts饼状图(仅限饼状图) TODO: 1.饼状图没有数据情况下,显示:no data to display 2,解决的方法:自己定义处理.显示图像或其他内容 
- 4、java变量、函数、基本类型的值传递、分支、循环、流程控制
			一.全局变量(global).局部变量(local).动态变量(dynamic).静态变量(static) 在类中的变量为全局变量,在方法函数中为局部变量,局部变量必须有人为赋的初值,全局变量的初值是 ... 
- An existing connection was forcibly closed by the remote host
			StackOverflow https://stackoverflow.com/questions/5420656/unable-to-read-data-from-the-transport-con ... 
- django 笔记16 文件上传笔记
			views.py文件 def upload_file(request): username = request.POST.get('username') fafafa = request.FILES. ... 
- [BZOJ4289]  [PA2012] Tax 解题报告 (最短路+差分建图)
			题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4289 4289: PA2012 Tax Time Limit: 10 Sec Memo ... 
- 升级JDK9后eclipse无法启动的解决方法
			解决方法-打开: D:\Program Files\eclipse\eclipse.ini 在文件末尾添加一行: --add-modules=ALL-SYSTEM 再次启动eclipse即可 感谢ht ... 
- 《剑指offer》树的子结构
			一.题目描述 输入两颗二叉树A,B,判断B是不是A的子结构. 二.输入描述 输入两棵树A,B. 三.输出描述 判断B是不是A的子结构,是返回true,否则返回false. 四.牛客网提供的框架 /* ... 
- css columns 与overflow结合的问题
			想实现上面这样分栏,并且溢出滚动的效果.可是自己下面的代码只能得到横向滚动条.觉得出现这个情况觉得还蛮有意思的,特地记录一下. <li v-for="(item,index) in s ... 
- php如何openssl_encrypt加密解密
			最近在对接客户的CRM系统,获取令牌时,要用DES方式加密解密,由于之前没有搞错这种加密方式,经过请教了"百度"和"谷歌"两个老师后,结合了多篇文档内容后,终于 ... 
