UVALive-5731

题意

一颗 n - 1 条边的有向树,要求整棵树成为强连通图,一次操作即构建一条路(一笔画),

限制:

  • 新建的路上的所有边必须与原有的边逆向,即构建的路必须在原有的边和点上,
  • 操作构建的路可以存在公共边或公共点,
  • 一次操作构建的路只能有同一点或边一次

分析

要成为强连通图,那么在建边的时候肯定是正反边都要建了,

up[i] ,表示从 子节点 到 当前节点 i 要有多少条向上的边;

down[i] ,表示从 当前节点 i 到 子节点 要有多少条向下的边;

对1这个节点,up[1] = 1,因为实际有一条从 1 到 2 的边,那么新建的边就是 2 -> 1 的这条边;

结合这个例子模拟一下就好懂了,

从 0 开始向下搜索,

先搜到 4 之后回到 3 ,显然 4 -> 3 建边,那么 up[3] = 1 ,

再去搜 5 再回到 3 ,此时 5 -> 3 建边,那么 up[3] = 2,

回到 2 ,那么 up[2] = max(1, up[3]) = 2 ,

再去搜 1 ,回到 2,2 -> 1 建边,down[2] = 1,

关键来了,此时 min(up[2], down[2]) > 0 ,说明可以直接从 4 向 1 建一条路,然后 up[2]-- ,down[2]-- ,ans++;

多的 up[] down[] 继续向上传递即可,最后答案加上 max(up[0], down[0]);

对于这种情况,从 0 开始搜,搜到 2 后回到 1,up[1] = 1,在回到 0 ,down[0] = 1,在得到 down[0] 的值的时候注意了,ans 要直接加上 up[1] 的值,因为up[1] 无法向上传递了,所以当边的方向产生交替的时候,就要处理那些无法向上传递的值;

code

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 2e4 + 10;
typedef pair<int, int> P;
vector<P> G[MAXN];
int up[MAXN];
int down[MAXN];
int ans;
void dfs(int pre, int u)
{
for(int i = 0; i < G[u].size(); i++)
{
P v = G[u][i];
if(v.first == pre) continue;
dfs(u, v.first);
if(v.second)
{
up[u] += max(1, up[v.first]);
ans += down[v.first];
}
else
{
down[u] += max(1, down[v.first]);
ans += up[v.first];
}
}
int tmp = min(up[u], down[u]);
up[u] -= tmp; down[u] -= tmp;
ans += tmp;
}
int main()
{
int T, c = 1;
scanf("%d", &T);
while(T--)
{
memset(G, 0, sizeof G);
memset(up, 0, sizeof up);
memset(down, 0, sizeof down);
ans = 0;
int n;
scanf("%d", &n);
for(int i = 1; i < n; i++)
{
int x, y;
scanf("%d%d", &x, &y);
G[x].push_back(P(y, 1));
G[y].push_back(P(x, 0));
}
dfs(-1, 0);
printf("Case %d: %d\n", c++, ans + max(up[0], down[0]));
}
return 0;
}

UVALive-5731的更多相关文章

  1. uvalive 5731 Qin Shi Huang’s National Road System

    题意: 秦始皇要修路使得所有的城市连起来,并且花费最少:有一个人,叫徐福,他可以修一条魔法路,不花费任何的钱与劳动力. 秦始皇想让修路的费用最少,但是徐福想要受益的人最多,所以他们经过协商,决定让 A ...

  2. UVALive - 4108 SKYLINE[线段树]

    UVALive - 4108 SKYLINE Time Limit: 3000MS     64bit IO Format: %lld & %llu Submit Status uDebug ...

  3. UVALive - 3942 Remember the Word[树状数组]

    UVALive - 3942 Remember the Word A potentiometer, or potmeter for short, is an electronic device wit ...

  4. UVALive - 3942 Remember the Word[Trie DP]

    UVALive - 3942 Remember the Word Neal is very curious about combinatorial problems, and now here com ...

  5. 思维 UVALive 3708 Graveyard

    题目传送门 /* 题意:本来有n个雕塑,等间距的分布在圆周上,现在多了m个雕塑,问一共要移动多少距离: 思维题:认为一个雕塑不动,视为坐标0,其他点向最近的点移动,四舍五入判断,比例最后乘会10000 ...

  6. UVALive 6145 Version Controlled IDE(可持久化treap、rope)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  7. UVALive 6508 Permutation Graphs

    Permutation Graphs Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit ...

  8. UVALive 6500 Boxes

    Boxes Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Pract ...

  9. UVALive 6948 Jokewithpermutation dfs

    题目链接:UVALive 6948  Jokewithpermutation 题意:给一串数字序列,没有空格,拆成从1到N的连续数列. dfs. 可以计算出N的值,也可以直接检验当前数组是否合法. # ...

  10. 【暑假】[实用数据结构]UVAlive 3135 Argus

    UVAlive 3135 Argus Argus Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %l ...

随机推荐

  1. jquery转盘抽奖的研究

    先看效果: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF ...

  2. Unity 相机的聚焦功能

    摘要:本文原创,转载请注明出处 需求: 在游戏的任务编辑场景进行编辑的时候,摄像机需要在多个需要编辑的物体之间来回切换,如果只是用摄像机的移动旋转,对于相对位置较近的物体还好说,当相对位置过远的时候, ...

  3. Spring事务执行过程

    先说一下启动过程中的几个点: 加载配置文件: AbstractAutowireCapableBeanFactory.doCreateBean --> initializeBean --> ...

  4. bootstrap快速入门笔记(一)

    一,头部基本格式:<head lang="en"> <meta charset="UTF-8"> <meta name=" ...

  5. Dora.Interception: 一个为.NET Core度身定制的AOP框架

    多年从事框架设计开发使我有了一种强迫症,那就是见不得一个应用里频繁地出现重复的代码.之前经常Review别人的代码,一看到这样的程序,我就会想如何将这些重复的代码写在一个地方,然后采用“注入”的方式将 ...

  6. 《分布式Java应用之基础与实践》读书笔记三

    对于大型分布式Java应用与SOA,我们可以从以下几个方面来分析: 为什么需要SOA SOA是什么 eBay的SOA平台 可实现SOA的方法 为什么需要SOA   第一个现象是系统多元化带来的问题,可 ...

  7. php表单提交 图片、音乐、视频、文字,四种类型共同提交到数据库

    这个问题一直困扰了我好几天,终于在今天让我给解决了,难以掩饰的激动. 其实在之前没有接触到这种问题,只是表单提交数据而已,再就是图片,四种类型同时提交还真是没遇到过,做了一个系统,其中有一个功能就是提 ...

  8. Node.js项目APM监控之New Relic

    现在上一个项目,如果没有APM监控服务或应用的运行性能参数,等于是一架没有盲降系统的飞机正在盲降,结果会很悲催.出现了访问失效等问题时,都很难判定是性能瓶颈还是一个藏的深的bug,汇报的时候一顿眼晕, ...

  9. [刷题]算法竞赛入门经典(第2版) 6-1/UVa673 6-2/UVa712 6-3/UVa536

    这三题比较简单,只放代码了. 题目:6-1 UVa673 - Parentheses Balance //UVa673 - Parentheses Balance //Accepted 0.000s ...

  10. 深入Java集合学习系列:Hashtable的实现原理

    第1部分 Hashtable介绍 和HashMap一样,Hashtable也是一个散列表,它存储的内容是键值对(key-value)映射.Hashtable继承于Dictionary,实现了Map.C ...