【P2016】战略游戏(贪心||树状DP)
这个题真是。。。看了一会之后,发现有一丝丝的熟悉,再仔细看了看,R,这不是那个将军令么。。。然后果断调出来那个题,还真是,而且貌似还是简化版的。。。于是就直接改了改建树和输入输出直接交了。。阿勒,就20分。。真是不给面子,于是就继续简化了代码。。。然后又交,变0分了。发现建树的时候双向边里面放了顺序一样的字母。。再改过来,A了,然而树形DP做法还未可知。。或许蒟蒻我就只能贪心吧。。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define re register
using namespace std;
struct po
{
int next;
int to;
int dis;
};
po edge[];
int head[],b[],temp[],dis[],f[];
int T,s,t,n,m,x,w,a,l,num,flag,ans,visit[],k;
inline int read() {
char ch=' ';
int w=,x=;
while(ch!='-'&&(ch<''||ch>''))ch=getchar();
if(ch=='-')w=-,ch=getchar();
while(ch>=''&&ch<='')x=x*+ch-'',ch=getchar();
return x*w;
}
inline void add_edge(int from,int to,int dis)
{
edge[++num].next=head[from];
edge[num].to=to;
edge[num].dis=;
head[from]=num;
}
inline void dfs(int x,int fa)
{
temp[++l]=x;
for(re int i=head[x];i;i=edge[i].next)
if(edge[i].to!=fa)
dfs(edge[i].to,x);
}
int main()
{
cin>>n;
k=;
for(re int i=;i<=n;i++)
{
s=read();
s++;
m=read();
for(re int j=;j<=m;j++)
{
t=read();
t++;
add_edge(s,t,);
add_edge(t,s,);
f[t]=s;
}
}
dfs(,);
for(re int i=n;i>=;i--)
if(!b[temp[i]]&&!b[f[temp[i]]])
b[f[temp[i]]]=;
for(re int i=;i<=n;i++)
if(b[i])
ans++;
cout<<ans;
}
给出树状DP做法:
#include<iostream>
#include<cstdio>
#include<cstring>
#define re register
using namespace std;
struct po
{
int next;
int to;
int dis;
};
po edge[];
int head[],b[],temp[],dis[],f[][];
int T,s,t,n,m,x,w,a,l,num,flag,ans=,visit[],k;
inline int read() {
char ch=' ';
int w=,x=;
while(ch!='-'&&(ch<''||ch>''))ch=getchar();
if(ch=='-')w=-,ch=getchar();
while(ch>=''&&ch<='')x=x*+ch-'',ch=getchar();
return x*w;
}
inline void add_edge(int from,int to,int dis)
{
edge[++num].next=head[from];
edge[num].to=to;
edge[num].dis=;
head[from]=num;
}
inline void dfs(int x,int fa)
{
f[x][]=;f[x][]=;
for(re int i=head[x];i;i=edge[i].next)
{
int u=edge[i].to;
if(u!=fa)
{
dfs(u,x);
f[x][]+=min(f[u][],f[u][]);
f[x][]+=f[u][];
}
}
}
int main()
{
cin>>n;
k=;
for(re int i=;i<=n;i++)
{
s=read();
s++;
m=read();
for(re int j=;j<=m;j++)
{
t=read();
t++;
add_edge(s,t,);
add_edge(t,s,);
}
}
for(re int i=;i<=n;i++)
{
memset(f,,sizeof(f));
dfs(i,i);
ans=min(ans,min(f[i][],f[i][]));
}
cout<<ans;
}
【P2016】战略游戏(贪心||树状DP)的更多相关文章
- P2016 战略游戏——树形DP大水题
P2016 战略游戏 树形DP 入门题吧(现在怎么是蓝色标签搞不懂): 注意是看见每一条边而不是每一个点(因为这里错了好几次): #include<cstdio> #include< ...
- 洛谷P2016 战略游戏
P2016 战略游戏 题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目 ...
- 树状DP (poj 2342)
题目:Anniversary party 题意:给出N各节点的快乐指数,以及父子关系,求最大快乐指数和(没人职员愿意跟直接上司一起玩): 思路:从底向上的树状DP: 第一种情况:第i个员工不参与,F[ ...
- poj3659树状DP
Cell Phone Network Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6273 Accepted: 225 ...
- hdu 1561 The more, The Better_树状dp
题目链接 题意:给你一棵树,各个节点都有价值(除根节点),从根节点出发,选择m个节点,问最多的价值是多小. 思路:很明显是树状dp,遍历树时背包最优价值,dp[i][k]=max{dp[i][r]+d ...
- poj 2342 Anniversary party_经典树状dp
题意:Ural大学有n个职员,1~N编号,他们有从属关系,就是说他们关系就像一棵树,父节点就是子节点的直接上司,每个职员有一个快乐指数,现在要开会,职员和职员的直接上司不能同时开会,问怎才能使开会的快 ...
- 树状DP HDU1520 Anniversary party
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意:职员之间有上下级关系,每个职员有自己的happy值,越高在派对上就越能炒热气氛.但是必须是 ...
- [Codeforces743D][luogu CF743D]Chloe and pleasant prizes[树状DP入门][毒瘤数据]
这个题的数据真的很毒瘤,身为一个交了8遍的蒟蒻的呐喊(嘤嘤嘤) 个人认为作为一个树状DP的入门题十分合适,同时建议做完这个题之后再去做一下这个题 选课 同时在这里挂一个选取节点型树形DP的状态转移方程 ...
- HDU 4714 Tree2cycle(树状DP)(2013 ACM/ICPC Asia Regional Online ―― Warmup)
Description A tree with N nodes and N-1 edges is given. To connect or disconnect one edge, we need 1 ...
随机推荐
- Linux下IP等网络配置
Linux下IP等网络配置: 我所知道一共三种方式,下面简单介绍(注意:网络配置必须”root管理员“登录才能进行配置). 一 1.首先在命令行输入[ifconfig]命令,可看到相关网络信息,其中” ...
- redis字典的底层实现hashTable
Redis的字典使用哈希表作为底层实现.一个哈希表里面可以有多个哈希表节点,而每个哈希表节点就保存了字典中的一个键值对 哈希表的数据结构为 table属性是一个数组,数组中的每个元素都是指向dictE ...
- 48、ViewFlow ---- 滑动广告页
<!-- main.xml --> <?xml version="1.0" encoding="utf-8"?> <LinearL ...
- 在eclipse里面使用git仓库,并且使用maven加载项目
前提:安装完成git和maven(maven需要在eclipse中配置完成) 1.点击Windows->show view 选择Git Repositories(git仓库) 2.点击2号图标, ...
- java 对list 排序
Comparable用Collections.sort方法对list排序有两种方法第一种是list中的对象实现Comparable接口,如下: /*** 根据order对User排序*/public ...
- debug_backtrace final catch
<?php function backtrace_str(){ $str = ''; $w = 0; $backtrace = debug_backtrace(); foreach($backt ...
- Java线程的5种状态及切换
ava中的线程的生命周期大体可分为5种状态. 1. 新建(NEW):新创建了一个线程对象. 2. 可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方 ...
- 安装CentOS 7.4 可能会出现的坑以及解决方案
安装CentOS 7.4 可能会出现的坑以及解决方案 (解决方法不唯一,如果行不通的话emmmm~~, 百度会啥你会啥~~) 坑.0X01 解决: 退出虚拟机,以管理员权限运行 坑.0X02 解决: ...
- Python文件操作——逐行插入内容
需求: 分析: 1)打开文件 2)readlines() 读文件(按行读) --> 拿到文件内容 data 3)循环遍历 data 的每行,在每行后面进行拼接要插入的内容 4)往新文件里写 代码 ...
- 5 Best VPNs for Ubuntu
https://www.bestvpn.com/blog/6268/5-best-vpns-for-ubuntu/?nabe=6412130213429248:0&utm_referrer=h ...