hdu 1054 Strategic Game
http://acm.hdu.edu.cn/showproblem.php?pid=1054
树形DP 主要是把思路屡清楚
选个根结点进行向下搜 每个点都有两种可能 放士兵还是不放
防止重复搜索就可以
#include<iostream>
#include<string>
#include<string.h>
#include<queue>
#include<math.h>
#include<stdio.h>
#include<algorithm>
#include<map>
using namespace std;
const int N=2000;
int yans[N];//此点放士兵 以此点为根结点的树的放士兵最小值
int nans[N];//此点不放士兵 以此点为根结点的树的放士兵最小值
bool had[N];//建的链表为双向 所以不能回搜 用作标记
struct node
{
struct tt *next;
}mem[N];
struct tt
{
struct tt *next;
int k;
};
inline void build(int i,int j)//建邻接表
{
struct tt *t=new tt;
t->k=j;
t->next=mem[i].next;
mem[i].next=t;
}
void freee(int n)//释放空间
{
struct tt *t;
for(int i=0;i<n;++i)
{
while(mem[i].next!=NULL)
{
t=mem[i].next;
mem[i].next=t->next;
delete(t);
}
}
}
int ydp(int x);
int ndp(int x)
{
if(nans[x]!=-1)//防止重复
return nans[x];
struct tt *t=mem[x].next;
nans[x]=0;//此点不放
while(t!=NULL)
{
if(!had[t->k])
{
had[t->k]=true;
nans[x]+=ydp(t->k);//此点不放 下边的点必须放
had[t->k]=false;
}
t=t->next;
}
return nans[x];
}
int ydp(int x)
{
if(yans[x]!=-1)
return yans[x];
struct tt *t=mem[x].next;
yans[x]=1;//此点放
while(t!=NULL)
{
if(!had[t->k])
{
had[t->k]=true;
yans[x]+=min(ydp(t->k),ndp(t->k));//此点放 下边的点可放 可不放 取最小
had[t->k]=false;
}
t=t->next;
}
return yans[x];
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i,j,m;
for(int l=0;l<n;++l)
{
scanf("%d",&i);
getchar();getchar();
scanf("%d",&m);
getchar();
while(m--)
{
scanf("%d",&j);
build(i,j);
build(j,i);
}
}
memset(yans,-1,sizeof(yans));
memset(nans,-1,sizeof(nans));
memset(had,false,sizeof(had));
had[0]=true;
printf("%d\n",min(ydp(0),ndp(0)));//以0为根结点 取最小
freee(n);
}
return 0;
}
转载于:https://www.cnblogs.com/liulangye/archive/2012/04/22/2465386.html
hdu 1054 Strategic Game相关推荐
- hdu 1054 Strategic Game 二分图最小点覆盖
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054 题意: 给出一个无向图,求最小点覆盖. 思路: 用网络流来做设立一个超级源点和一个超级汇点. 每 ...
- hdu 1054 Strategic Game 最小点覆盖 = 最大二分匹配
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1054 简单二分匹配,根据题意构造一个无向图.然后求最小点覆盖,然后扫描mark数组将曾经匹配的点所匹配 ...
- HDU——1054 Strategic Game
Strategic Game Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU 1054 Strategic Game 最小点覆盖
最小点覆盖概念:选取最小的点数覆盖二分图中的所有边. 最小点覆盖 = 最大匹配数. 证明:首先假设我们求的最大匹配数为m,那么最小点覆盖必然 >= m,因为仅仅是这m条边就至少需要m个点.然后 ...
- HDU - 1054 Strategic Game(最小点覆盖-二分图最大匹配)
题目链接:点击查看 题目大意:给出一棵树,现在要在节点上放置士兵,每个士兵可以监视与其所在的节点直接相连的节点,问最少需要多少个士兵才能将整棵树都监视到 题目分析:求最少的节点,以保证每条边都有一个端 ...
- HDU - 1054 Strategic Game (二分图匹配模板题)
二分图匹配模板题 #include <bits/stdc++.h> #define FOPI freopen("in.txt", "r", stdi ...
- hdu 1054(最小顶点覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054 思路:最小顶点覆盖 == 最大匹配(双向图)/2...不过一开始是用邻接矩阵,傻傻的TLE... ...
- kuangbin带你飞专题合集
题目列表 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题二 搜索进阶 [kuangbin带你飞]专题三 Dancing Links [kuangbin带你飞]专题四 最短路 ...
- 算法学习经典例题整理
陆续会对本篇博客进行更新! 搜索:https://vjudge.net/contest/292597 区间DP:https://vjudge.net/contest/293892 树状背包:https ...
最新文章
- A里正在拆中台,你还在建中台吗?
- SAP库存历史库存表更新逻辑
- [html] H5的video可以播放哪些类型的文件?可以播放rtsp流吗?
- (六)Neo4j综合项目
- 重写equals方法---java
- php pdo query 空判断,检查空结果(php,pdo,mysql)
- Java NIO学习与记录(七): Reactor单线程模型的实现
- 基于SSM的个人博客系统
- H264三种码率控制方法(CBR, VBR, CVBR,)CRF和CQP
- 迭代回溯的图最大团问题(可得到多组最优解)
- vue3中的vue-router简单实现以及router变迁带来的思考
- 图片上传几种方式总结
- 关于多个债权人申请执行同一被执行人的清偿顺序问题
- 高通骁龙410e/APQ8016E嵌入式物联网模块芯片
- IOS gif图片播放 swift
- IAR OF STM8 Error[Pe095]: array is too large
- 通往强人工智能,少不了的模拟大脑
- 未来人类将被AI取代?一文读懂人工智能类型与发展阶段
- 考虑风电经济调度的储能运行优化
- PHP防火墙代码,防火墙 firewall iptables(示例代码)
热门文章
- neoterm如何安装python_NeoTerm官方版v2.1.0下载_NeoTerm(21世纪的终端)下载-刷机之家
- python3.7怎么用_Python 3.7.0 来了!
- 大数据时代,海量数据处理常用思路和方法总结
- 大多数元素python_学Python必知的20个技巧,掌握它们,准没错
- oracle客户端查看版本号,Oracle 版本查看及版本号说明
- 系统学习深度学习(二十六)--BiRNN
- 图像局部特征(十三)--FREAK特征
- 计算机科学素养大赛,第六届全国大学生计算机应用能力与信息素养大赛圆满结束...
- 电脑太慢了最简单的办法怎么弄_修电脑不求人—最实用办公室电脑故障及解决办法,办公室人都说好...
- presto distinct用法