luoguP1131

。。。这道题我也不知道咋\(A\)的。

思路:

\(anst\) 距离 \(s\) 的最长距离,\(ansp\) 某一节点到祖先所有边的权值和这些些加过的权值和

先求出到\(s\)距离最长的点,其他点通过使用道具增加到这个点的长度。对于每一个节点,记录一个它的子节点到它的距离最长的点(距离\(dis[u]\))。在\(u\)到它父亲的边上加\(anst-ansp-dis[u]\),\(ans\)也加上\(anst-ansp-dis[u]\)。

。。。 解释得不太清楚

#include<iostream>
#include<cstdio>
#include<cstring>
#define LL long long
using namespace std;
const int N = 500005;
int head[N],n,tot,s,m[N];
struct edge{
int node,next,data;
}e[N<<1];
long long ans,anst,dis[N];
void add(int x,int y,int z)
{
e[++tot].node=y; e[tot].data=z;
e[tot].next=head[x]; head[x]=tot;
}
inline int read()
{
int ans=0,w=1;
char c=getchar();
while((c<'0'||c>'9')&&c!='-') c=getchar();
if(c=='-') { w=-1; c=getchar(); }
while(c>='0'&&c<='9')
{ ans=ans*10+c-'0'; c=getchar(); }
return ans*w;
}
void dfs(int u,int fa)
{
for(int i=head[u];i;i=e[i].next)
{
int v=e[i].node;
if(v==fa) continue;
dfs(v,u);
if(dis[v]+e[i].data>dis[u])
dis[u]=dis[v]+e[i].data,m[u]=v;
}
}
void dfs1(int u,int fa,LL ansp)
{
ans+=(anst-dis[u]-ansp),ansp+=(anst-dis[u]-ansp);
for(int i=head[u];i;i=e[i].next)
{
int v=e[i].node;
if(v==fa) continue;
dfs1(v,u,ansp+e[i].data);
}
}
int main()
{
// memset(dis,0x7f,sizeof(dis));
n=read(); s=read();
int x,y,z;
for(int i=1;i<n;i++)
{
x=read(); y=read(); z=read();
add(x,y,z); add(y,x,z);
}
dfs(s,0);
anst=dis[s];
dfs1(s,0,0);
printf("%lld\n",ans);
return 0;
}

luoguP1131的更多相关文章

  1. [luoguP1131] [ZJOI2007]时态同步(贪心)

    传送门 显然是一棵树. 又显然一段一段地增加比较优. 我们可以dfs,并且尽量把每一个节点所有子树中所有节点的时间增加到一样. #include <vector> #include < ...

  2. LuoguP1131 [ZJOI2007]时态同步 (树形DP,贪心)

    贪心就离根最大距离 #include <iostream> #include <cstdio> #include <cstring> #include <al ...

随机推荐

  1. String,StringBuffer与StringBuilder的区别?? 缓存

    转: String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主 ...

  2. tomcat server.xml结构

    所有xml文件使用的文件头 <?xml version='1.0' encoding='utf-8'?> 2 <Server port="8005" shutdo ...

  3. /Date(1555554794000)/ 转换为日期格式

    /Date(1555554794000)/ 转换为 2019/4/18 new Date(parseInt('/Date(1555554794000)/'.substr(6, 13))).toLoca ...

  4. Java 获取指定日期范围内的每个月,每季度,每一年

    /**     *根据时间范围获得月份集     * @return     */    public static List<String> getRangeSet(String beg ...

  5. Shell 简单构建 Node web服务器

    .git bash 执行代码生成: ./makeJs.sh 生成文件如下: 访问:http://127.0.0.1:3030/index.html makeJs.sh  代码如下: #create m ...

  6. win10子系统 (linux for windows)打造python, pytorch开发环境

    一.windows设置 0.启用windows子系统 控制面板--程序--启用或关闭windows功能--勾选适用于linux的Windows子系统 确定后会重启电脑 1.下载Ubuntu 在Micr ...

  7. mkdir(): Permission denied

    记录下,凡是遇到此类问题都是无权限导致. 根据不同场景,需要在不同的文件夹设置不同的权限. 例如,图片相关, 在php中,首先看下 配置php.ini的文件上传是否开启(file_uploads = ...

  8. QPS从0到4000请求每秒,谈达达后台架构演化之路

    达达是全国领先的最后三公里物流配送平台. 达达的业务模式与滴滴以及Uber很相似,以众包的方式利用社会闲散人力资源,解决O2O最后三公里即时性配送难题(目前达达已经与京东到家合并). 达达业务主要包含 ...

  9. HBase读写的几种方式(三)flink篇

    1. HBase连接的方式概况 主要分为: 纯Java API读写HBase的方式: Spark读写HBase的方式: Flink读写HBase的方式: HBase通过Phoenix读写的方式: 第一 ...

  10. RabbitMQ 和 Kafka

    ============================RabbitMQ 术语============================RabbitMQ 有很多术语和Kafka不一样, 理解这些术语十分 ...