hdu2196 Compute
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4646 Accepted Submission(s): 2345
net and want to know the maximum distance Si for which i-th computer needs to send signal (i.e. length of cable to the most distant computer). You need to provide this information.
Hint: the example input is corresponding to this graph. And from the graph, you can see that the computer 4 is farthest one from 1, so S1 = 3. Computer 4 and 5 are the farthest ones from 2, so S2 = 2. Computer 5 is the farthest one from 3, so S3 = 3. we also
get S4 = 4, S5 = 4.
and length of cable used for connection. Total length of cable does not exceed 10^9. Numbers in lines of input are separated by a space.
1 1
2 1
3 1
1 1
2
3
4
4
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>
using namespace std;
typedef long long ll;
#define inf 99999999
#define maxn 10060
struct node{
int len,to,next;
}e[2*maxn];
int first[maxn],vis[maxn],dist1[maxn],dist2[maxn],ans[maxn];//dist1[i]表示最大路,dist2[i]表示次大路,dist1id[i]表示得到最大路的叶子节点编号,dist2id[i]表示得到次大路的叶子节点编号
int dist1id[maxn],dist2id[maxn];
void dfs(int u)
{
int i,j,t1,t2,flag;
t1=t2=0;
vis[u]=1;
flag=0;
for(i=first[u];i!=-1;i=e[i].next){
int v=e[i].to;
if(vis[v])continue;
flag=1;
dfs(v);
int t=e[i].len+dist1[v];
if(t>=dist1[u]){
dist2[u]=dist1[u];
dist1[u]=t;
dist2id[u]=dist1id[u];
dist1id[u]=dist1id[v];
}
else if(t>dist2[u]){
dist2[u]=t;
dist2id[u]=dist1id[v];
}
}
if(flag==0){
dist1[u]=dist2[u]=0;
dist1id[u]=dist2id[u]=u;return;
}
}
void dfs1(int u)
{
int i,j,t,t1,t2;
t1=t2=0;
vis[u]=1;
for(i=first[u];i!=-1;i=e[i].next){
int v=e[i].to;
if(vis[v])continue;
if(dist1id[u]==dist1id[v]){ //这里先看一下父亲节点所求出的最大路的叶子节点编号是不是和当前节点相同
int t=e[i].len+dist2[u];
if(t>=dist1[v]){
dist2[v]=dist1[v];
dist2id[v]=dist1id[v];
dist1[v]=t;
dist1id[v]=dist2id[u];
}
else if(t>dist2[v]){
dist2[v]=t;
dist2id[v]=dist2id[u];
} //要随时更新dist1[i],这里dist1[i]已经不仅是子树范围了,而是全部范围
}
else{
int t=e[i].len+dist1[u];
if(t>=dist1[v]){
dist2[v]=dist1[v];
dist2id[v]=dist1id[v];
dist1[v]=t;
dist1id[v]=dist1id[u];
}
else if(t>dist2[v]){
dist2[v]=t;
dist2id[v]=dist1id[u];
}
}
dfs1(v);
}
}
int main()
{
int n,m,i,j,c,d;
while(scanf("%d",&n)!=EOF)
{
memset(first,-1,sizeof(first));
int tot=0;
for(i=2;i<=n;i++){
scanf("%d%d",&c,&d);
int u,v;
u=i;v=c;
tot++;
e[tot].next=first[u];e[tot].to=v;e[tot].len=d;
first[u]=tot;
tot++;
e[tot].next=first[v];e[tot].to=u;e[tot].len=d;
first[v]=tot;
}
memset(vis,0,sizeof(vis));
memset(dist1,0,sizeof(dist1));
memset(dist2,0,sizeof(dist2));
memset(dist1id,0,sizeof(dist1id));
memset(dist2id,0,sizeof(dist2id));
dfs(1);
memset(vis,0,sizeof(vis));
dfs1(1);
for(i=1;i<=n;i++){
printf("%d\n",dist1[i]);
}
}
return 0;
}
hdu2196 Compute的更多相关文章
- C#中DataTable中的Compute方法使用收集
原文: C#中DataTable中的Compute方法使用收集 Compute函数的参数就两个:Expression,和Filter. Expresstion是计算表达式,关于Expression的详 ...
- Compute Resource Consolidation Pattern 计算资源整合模式
Consolidate multiple tasks or operations into a single computational unit. This pattern can increase ...
- 学习OpenStack之(6):Neutron 深入学习之 OVS + GRE 之 Compute node 篇
0.环境 硬件环境见上一篇博客:学习OpenStack之(5):在Mac上部署Juno版本OpenStack 四节点环境 OpenStack网络配置:一个tenant, 2个虚机 Type drive ...
- openstack-lanch an instance and nova compute log analysis
1. how to launch an instance: [root@localhost ~(keystone_admin)]# nova flavor-list+----+-----------+ ...
- 【原创翻译】初识Unity中的Compute Shader
一直以来都想试着自己翻译一些东西,现在发现翻译真的很不容易,如果你直接把作者的原文按照英文的思维翻译过来,你会发现中国人读起来很是别扭,但是如果你想完全利用中国人的语言方式来翻译,又怕自己理解的不到位 ...
- Many2one类型的fields Compute得到的值 搜索
v8 默认情况下compute的值不存储于数据库中,在高级搜索中也不可以进行搜索 想要对这种类型的值搜索,需要在field的定义中添加search参数,在search的函数中编写搜索逻辑. 例子: r ...
- A trip through the Graphics Pipeline 2011_13 Compute Shaders, UAV, atomic, structured buffer
Welcome back to what’s going to be the last “official” part of this series – I’ll do more GPU-relate ...
- DataTable.Compute()用法
DataTable.Compute()用法 2010-04-07 11:28 一.DataTable.Compute()方法說明如下 作用: 计算用来传递筛选条件的当前行上的给定表达 ...
- 转:DataTable的Compute方法的应用
转自:http://www.cnblogs.com/hfliyi/archive/2013/01/08/2851944.html 项目中遇到计算平均值.标准偏差.平均值+标准偏差.平均值+2倍标准偏差 ...
随机推荐
- 【Flutter】容器类组件之Container容器
前言 Container是一个组合类容器,它本身不对应具体的RenderObject,它是DecoratedBox.ConstrainedBox.Transform.Padding.Align等组件组 ...
- Nginx 路由转发和反向代理 location 配置
Nginx 配置的三种方式 第一种直接替换 location 匹配部分 第二种 proxy_pass 的目标地址,默认不带 /,表示只代理域名,url 和参数部分不会变(把请求的 path 拼接到 p ...
- 【Linux】awk想打印制定列以后的所有列
今天偶然研究awk,有一个文件,文件内容是全篇的1 2 3 4 5 6 7 8 9 0 现在想打印除了第一列意外的所有列 文件内容: [root@localhost ~]# cat test.txt ...
- CTS相关的几个表
TMSALOG/TMSALOGAR :STMS传输日志表 TMSCNFS:传输组 TMSCDOM:传输域 TMSCDES:传输目的地 TMSBUFTXT:传输请求的短文本和用户 TMSCSYS:tms ...
- 在.NET Core 中使用Quartz.NET
Quartz.NET是功能齐全的开源作业调度系统,可用于最小的应用程序到大型企业系统. Quartz.NET具有三个主要概念: job:运行的后台任务 trigger:控制后台任务运行的触发器. sc ...
- monitor a local unix domain socket like tcpdump
Can I monitor a local unix domain socket like tcpdump? - Super User https://superuser.com/questions/ ...
- The Node.js Event Loop, Timers, and process.nextTick()
The Node.js Event Loop, Timers, and process.nextTick() | Node.js https://nodejs.org/uk/docs/guides/e ...
- kettle 连接oracle12c问题解决办法:
在oracle的安装文件目录......\NETWORK\ADMIN\sqlnet.ora 文件中添加该语句:SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8window ...
- Trie 前缀树或字典树 确定有限状态自动机
https://zh.wikipedia.org/wiki/Trie 应用 trie树常用于搜索提示.如当输入一个网址,可以自动搜索出可能的选择.当没有完全匹配的搜索结果,可以返回前缀最相似的可能.[ ...
- Java 字符串简介
从概念上讲,Java 字符串就是 Unicode 字符序列.Java 没有内置的字符串类型,而是在标准 Java 类库中提供了一个预定义类,很自然地叫做 String.每个用双引号括起来的字符串都是 ...