2021.08.09 P6037 Ryoku的探索(基环树)

P6037 Ryoku 的探索 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

重点:

1.树的性质

2.基环树的性质

题意:

Ryoku 所处的世界可以抽象成一个有 nn 个点, nn 条边的带权无向连通图 GG。每条边有美观度和长度。

Ryoku 会使用这样一个策略探索世界:在每个点寻找一个端点她未走过的边中美观度最高的走,如果没有边走,就沿着她前往这个点的边返回,类似于图的深度优先遍历

探索的一个方案的长度是这个方案所经过的所有边长度的和(返回时经过的长度不用计算)。

她想知道,对于每一个起点 s=1,2,⋯,n,她需要走过的长度是多少?

分析及代码:

//这是一棵美丽的基环树。
//先思考只是一棵树的情况:遍历所有边
//如果是一棵有x个点在环上的基环树呢?
//先从根结点出发,肯定要遍历子树
//接着访问环上左右两个边中最美丽的边,一路走到另一边的端点
//不从根节点出发,那就先遍历子树,走到根节点~
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std; typedef long long ll;
const int N=1e6+10;
int n,vis[N],cnt,head[N],ind,dfn[N],root[N],ans[N],fa[N];
ll sum;
struct node{
int to,next,val,beauty;
}a[N<<1]; inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
inline void add(int u,int v,int w,int x){
++cnt;
a[cnt].to=v;
a[cnt].val=w;
a[cnt].beauty=x;
a[cnt].next=head[u];
head[u]=cnt;
}
inline void find(int x){
++ind;
dfn[x]=ind;
for(int i=head[x];i;i=a[i].next){
int v=a[i].to;
if(v==fa[x])continue;
if(dfn[v]){
if(dfn[v]<dfn[x])continue;
vis[v]=1;
while(v!=x)vis[fa[v]]=1,v=fa[v];
}else{
fa[v]=x;
find(v);
}
}
}
void dfs(int x,int rt){
fa[x]=rt;
root[x]=1;
for(int i=head[x];i;i=a[i].next){
int v=a[i].to;
if(root[v]||vis[v])continue;
dfs(v,rt);
}
} int main(){
n=read();
for(int i=1;i<=n;i++){
int u,v,w,x;
u=read();v=read();w=read();x=read();
add(u,v,w,x);add(v,u,w,x);
sum+=w;
}
find(1);
for(int i=1;i<=n;i++){
if(vis[i]){
dfs(i,i);
int minn=0x3f3f3f3f;
for(int j=head[i];j;j=a[j].next){
int v=a[j].to;
if(vis[v]&&a[j].beauty<minn)ans[i]=a[j].val,minn=a[j].beauty;
}
}
}
for(int i=1;i<=n;i++)cout<<sum-1ll*ans[fa[i]]<<endl;
return 0;
}

2021.08.09 P6037 Ryoku的探索(基环树)的更多相关文章

  1. 2021.08.09 P5658 括号树(树形结构)

    2021.08.09 P5658 括号树(树形结构) [P5658 CSP-S2019] 括号树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 太长,在链接中. 分析及代码 ...

  2. 2021.08.09 P4868 Preprefix sum(树状数组)

    2021.08.09 P4868 Preprefix sum(树状数组) P4868 Preprefix sum - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 前缀和(pr ...

  3. 2021.08.09 P7238 迷失森林(树的直径)

    2021.08.09 P7238 迷失森林(树的直径) P7238 「DCOI」迷失森林 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.树的直径两种求法:两次dfs.树 ...

  4. 2021.08.09 P6225 抑或橙子(树状数组)

    2021.08.09 P6225 抑或橙子(树状数组) 重点: 1.异或用法 题意: Janez 喜欢橙子!他制造了一个橙子扫描仪,但是这个扫描仪对于扫描的每个橙子的图像只能输出一个 3232 位整数 ...

  5. 2021.08.09 P5018 对称二叉树(树形结构)

    2021.08.09 P5018 对称二叉树(树形结构) [P5018 NOIP2018 普及组] 对称二叉树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 求一棵子树,关 ...

  6. 2021.12.09 [HEOI2016/TJOI2016]排序(线段树+二分,把一个序列转换为01串)

    2021.12.09 [HEOI2016/TJOI2016]排序(线段树+二分,把一个序列转换为01串) https://www.luogu.com.cn/problem/P2824 题意: 在 20 ...

  7. JS parseInt 中08.09 被按照0处理(转)

    <script type="text/javascript"> var aa=["01","02","03" ...

  8. 2021.12.08 P1848 [USACO12OPEN]Bookshelf G(线段树优化DP)

    2021.12.08 P1848 [USACO12OPEN]Bookshelf G(线段树优化DP) https://www.luogu.com.cn/problem/P1848 题意: 当农夫约翰闲 ...

  9. 2021.11.09 P4824 [USACO15FEB]Censoring S与P3121 [USACO15FEB]Censoring G(KMP&&AC自动机)

    2021.11.09 P4824 [USACO15FEB]Censoring S与P3121 [USACO15FEB]Censoring G(KMP&&AC自动机) https://w ...

随机推荐

  1. Monkey的参数及简单使用

    什么是Monkey? Monkey是Android SDK提供的一个命令行工具,可以简单方便的发送伪随机的用户事件流,对Android APP做压力(稳定性)测试.主要是为了测试app是否存在无响应和 ...

  2. springboot通过maven下载依赖失败解决

    公司直接用不了内网遇到的好的坑.导入网上的springboot项目的启动入口一致有报错,如:Cannot resolve symbol 'SpringApplication' maven配置设置都做了 ...

  3. 「入门篇」初识JVM

    记录于 2022-01-02  17:25:12  GhostFace 1. 什么是JVM? 概念 来自百度百科 JVM是 Java Virtual Machine(Java虚拟机)的缩写,JVM是一 ...

  4. 【vue】中英文切换(使用 vue-i18n )

    一.准备工作 1.vue-i18n 1.仓库地址 2.兼容性:支持 Vue.js 2.x 以上版本 1-1.安装依赖vue-i18n (c)npm install vue-i18n 1-2.使用 在 ...

  5. 网络编程-Python的socket库

    一.网络连接经常用到的函数 sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)参数一:地址簇 socket.AF_INET IPv4(默认) ...

  6. setTimeout时间延迟为何不准?

    单线程, 先执行同步主线程, 再执行异步任务队列

  7. memcached 的内存分配器是如何工作的?为什么不适用 malloc/free!?为何要使用 slabs?

    实际上,这是一个编译时选项.默认会使用内部的 slab 分配器.您确实确实应该 使用内建的 slab 分配器.最早的时候,memcached 只使用 malloc/free 来管理 内存.然而,这种方 ...

  8. ctfhub密码口令

    弱口令 进入环境 使用burpsuit抓包爆破 密码长度不一样应该密码就为他 即可找到 默认口令 进入环境一开始不懂百度借鉴原来是要看常见设备默认口令 很快就找到了 一个一个的试 即可获得答案

  9. 第 4 章 ROS运行管理

    第 4 章 ROS运行管理 ROS是多进程(节点)的分布式框架,一个完整的ROS系统实现: 可能包含多台主机:每台主机上又有多个工作空间(workspace):每个的工作空间中又包含多个功能包(pac ...

  10. Numpy实现机器学习交叉验证的数据划分

    Numpy实现K折交叉验证的数据划分 本实例使用Numpy的数组切片语法,实现了K折交叉验证的数据划分 背景:K折交叉验证 为什么需要这个?在机器学习中,因为如下原因,使用K折交叉验证能更好评估模型效 ...