树形dp;

思想: 把正向边赋值为0;反向边赋值为1;然后求出点到其他点的最小距离;

两次dfs:

第一次是从下往上:记录每个点到所有子树中需要改变的边的条数;

第二次是自上往下:由父节点求子节点到所有点的需要改变的边的条数。

代码:

 #include<cstdio>
#include<cstring>
#include<vector>
#define maxn 200005
using namespace std; struct node
{
int v,w;
}; vector<node>ve[maxn];
int dp[maxn],res;
bool vis[maxn]; void dfs1(int a)
{
vis[a]=;
int l=ve[a].size();
for(int i=;i<l;i++)
{
int k=ve[a][i].v;
if(vis[k])continue;
dfs1(k);
res+=ve[a][i].w;
}
} void dfs2(int f)
{
vis[f]=;
int l=ve[f].size();
for(int i=;i<l;i++)
{
int k=ve[f][i].v;
if(vis[k])continue;
if(ve[f][i].w==) dp[k]=dp[f]+;
else dp[k]=dp[f]-;
dfs2(k);
}
} int main()
{
int n,a,b;
node no;
scanf("%d",&n);
for(int i=;i<n;i++)
{
scanf("%d%d",&a,&b);
no.v=b,no.w=;
ve[a].push_back(no);
no.v=a,no.w=;
ve[b].push_back(no);
}
res=;
dfs1();
dp[]=res;
memset(vis,,sizeof vis);
dfs2();
int min=;
for(int i=;i<=n;i++)
if(min>dp[i]) min=dp[i];
printf("%d\n",min);
for(int i=;i<=n;i++)
if(min==dp[i]) printf("%d ",i);
puts("");
return ;
}

cf 219D的更多相关文章

  1. CF 219D 树形DP

    CF 219D [题目链接]CF 219D [题目类型]树形DP &题意: 给一个n节点的有向无环图,要找一个这样的点:该点到其它n-1要逆转的道路最少,(边<u,v>,如果v要到 ...

  2. CF 219D Choosing Capital for Treeland 树形DP 好题

    一个国家,有n座城市,编号为1~n,有n-1条有向边 如果不考虑边的有向性,这n个城市刚好构成一棵树 现在国王要在这n个城市中选择一个作为首都 要求:从首都可以到达这个国家的任何一个城市(边是有向的) ...

  3. [CF] 219D Choosing Capital for Treeland

    题意翻译 题目描述 Treeland国有n个城市,这n个城市连成了一颗树,有n-1条道路连接了所有城市.每条道路只能单向通行.现在政府需要决定选择哪个城市为首都.假如城市i成为了首都,那么为了使首都能 ...

  4. 【codeforce 219D】 Choosing Capital for Treeland (树形DP)

    Choosing Capital for Treeland Description The country Treeland consists of n cities, some pairs of t ...

  5. Codeforces 划水

    Codeforces 566F 题目大意:给定$N$个数,任意两个数之间若存在一个数为另一个数的因数,那么这两个数存在边,求图中最大团. 分析:求一个图最大团为NP-Hard问题,一般不采用硬方法算. ...

  6. 树上的DP

    CF#196B http://codeforces.com/contest/338/problem/B 题意:在一颗树上,给m个点,求到所有m个点距离不超过d的点的个数,所有路径长度为1. 分析:问题 ...

  7. ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'

    凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...

  8. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  9. cf Round 613

    A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...

随机推荐

  1. Android(java)学习笔记158:Java程序入口和Android的APK入口

    1.Java程序的入口:static main()方法 public class welcome extends Activity { @Override public void onCreate(B ...

  2. Java 实现顺序查找

    package search; import java.util.Scanner; /*通常把查找过程中对关键字的平均比较次数,也叫平均查找长度(ASL)作为衡量一个查找算法效率优劣的标准: * AS ...

  3. 【MDCC技术大咖秀】Android内存优化之OOM

    大神分析的很全面,所以就转过来保存一份,转自:http://www.csdn.net/article/2015-09-18/2825737/1 以下为正文: Android的内存优化是性能优化中很重要 ...

  4. Scala可变参数列表,命名参数和参数缺省

    重复参数 Scala在定义函数时允许指定最后一个参数可以重复(变长参数),从而允许函数调用者使用变长参数列表来调用该函数,Scala中使用“*”来指明该参数为重复参数.例如: scala> de ...

  5. net.sf.json的jar包:JSONArray

    今天在用maven添加net.sf.json的jar包的时候,代码如下: ? 1 2 3 4 5 <dependency>     <groupId>net.sf.json-l ...

  6. centos6 install mplayer(multimedia)

    step_1 http://wiki.centos.org/AdditionalResources/Repositories/RPMForge step_2 http://wiki.centos.or ...

  7. SQL Server游标+延迟执行简介

    在项目测试中,我们可能会使用批量生成数据来测试程序的性能. 这里讲一个我遇到的问题,由于我们批量生成数据时基本上是瞬间完成,所以GETDATE()函数获得的时间基本上也是一样的,而我们又要求生成每条数 ...

  8. php session_id()函数介绍及代码实例

    session_id()功能: 获取设置当前回话ID. 函数说明: string session_id ([ string $id ] ) 参数: 如果指定了参数$id,那么函数会替换当前的回话id. ...

  9. ios6-7以后用户开热点后的屏幕适配

    // 排版时,注意logical coordinate space和device coordinate space的区别,注意frame和bounds的区别! - (void)loadView { / ...

  10. 上传代码到cocoapod ,自己的框架提供给开发者使用

    1.注册trunk 1 $sudo gem install cocoapods 1 pod trunk register 382782411@qq.com 'Henry519'  --verbose ...