这个题真是。。。看了一会之后,发现有一丝丝的熟悉,再仔细看了看,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;
}

最新文章

  1. Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试 (转)
  2. spark scala学习笔记
  3. JS添加删除DIV
  4. POJ 1068
  5. java输入一个字符串,打印出该字符串中字符的所有排列,随机打乱排序
  6. mac下配置openfire
  7. LightOJ1079 Just another Robbery(DP)
  8. [转]Visual Studio 实用扩展推荐
  9. A Knight&#39;s Journey 分类: POJ 搜索 2015-08-08 07:32 2人阅读 评论(0) 收藏
  10. iOS UILable高度自适应
  11. 【winform】如何在DateTimePicker中显示时分秒
  12. poj1611 简单并查集
  13. Sql 字符串操作类COALESCE
  14. SourceTree使用方法介绍
  15. iOS开发基础-九宫格坐标(5)
  16. Java_Character类
  17. vue-cli(vue脚手架)
  18. callee和斐波那契数列
  19. b2_trsd_EDSD_new
  20. npm 安装 electron 超时

热门文章

  1. Mongo同步数据到Elasticsearch
  2. HDU1688(Sightseeing)
  3. 前端Js传递数组至服务器端
  4. python并发编程&amp;协程
  5. Python 是怎么火起来的?
  6. MySQL 第四天
  7. (4.11)DBCC 常用命令
  8. 使用Kotlin开发Android应用(IV):自定义视图和Android扩展
  9. 201704 F-47创建预付款申请a
  10. 4.1 使用STM32控制MC20拨打电话