P4630 [APIO2018] 铁人两项(圆方树模版)

ops/2024/9/24 2:14:34/

*原题链接*

圆方树相关的东西小粉兔讲的太详细了!!(洛谷日报)

在此贴出适合我体质的模版,至于讲解,咱肯定讲的没小粉兔好o(╥﹏╥)o。

圆方树模版:

void tarjan(int x){dfn[x]=low[x]=++tim,stk[++top]=x;for(int i=head[x];i;i=edge[i].nxt){int y=edge[i].to;if(!dfn[y]){tarjan(y);low[x]=min(low[x],low[y]);if(low[y]==dfn[x]){cnt++;int t;do{t=stk[top--],add(t,cnt),add(cnt,t);}while(t!=y);//注意截止条件add(x,cnt),add(cnt,x);//别忘了和x连边}}else low[x]=min(low[x],dfn[y]);}
}

整题代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+10;int read(){int x=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();return x*f;
}int n,m,head[N],tot,he[N],tot2,w[N],sz[N],ans,num,vis[N];
int dfn[N],low[N],tim,stk[N],top,cnt;
struct node{int to,nxt;
}e[N*2],edge[N*2];
void add(int x,int y){edge[++tot].to=y;edge[tot].nxt=head[x];head[x]=tot;
}
void ADD(int x,int y){e[++tot2].to=y;e[tot2].nxt=he[x];he[x]=tot2;
}void tarjan(int x){dfn[x]=low[x]=++tim,stk[++top]=x,num++;for(int i=he[x];i;i=e[i].nxt){int y=e[i].to;if(!dfn[y]){tarjan(y);low[x]=min(low[x],low[y]);if(low[y]==dfn[x]){cnt++;int t;do{w[cnt]++,t=stk[top--],add(t,cnt),add(cnt,t);}while(t!=y);add(x,cnt),add(cnt,x),w[cnt]++;}}else low[x]=min(low[x],dfn[y]);}
}void dfs(int x){vis[x]=1;sz[x]=(x<=n);for(int i=head[x];i;i=edge[i].nxt){int y=edge[i].to;if(vis[y]) continue;dfs(y);ans+=2*sz[x]*sz[y]*w[x];sz[x]+=sz[y];}ans+=2*sz[x]*(num-sz[x])*w[x];
}signed main(){n=read(),m=read();cnt=n;for(int i=1;i<=n;i++) w[i]=-1;for(int i=1;i<=m;i++){int x=read(),y=read();ADD(x,y),ADD(y,x);}for(int i=1;i<=n;i++){if(!dfn[i]){memset(vis,0,sizeof(vis)),num=0,tarjan(i),dfs(i);}}cout<<ans<<endl;return 0;
}


http://www.ppmy.cn/ops/115072.html

相关文章

SLAM面经1(百度)

百度面经 百度共三面,如果面试效果俱佳,会增加一个hr面。前二面主要是技术面,分为在线coding+代码知识+专业知识+工程能力。第三面是主管面,偏向于管理方面,和hr面相似。 一面 1)在线coding 在线coding的考试内容为下面力扣的变种。 2)专业面 (1)VINS-FUSION与ORB…

PyCharm 调试 Xinference 遇到问题及解决方案

本文使用的 PyCharm 2024.2.1 版本&#xff0c;如果使用低版本 PyCharm&#xff0c;那么在调试 Xinference v0.15.1 源码时可能会报错 Connection to Python debugger failed Socket closed。 一.PyCharm 调试 Xinference 源码 由于 Xinference 中的一些依赖包仅支持 Linux&a…

C语言深入理解指针(二)

目录 指针运算指针-整数指针-指针指针的关系运算 野指针野指针成因指针未初始化指针越界访问指针指向的空间释放 如何规避野指针指针初始化注意指针越界指针不使用时就用NULL避免返回局部变量的地址 assert断言指针的使用和传址调用传址调用例子&#xff08;strlen函数的实现&a…

常用卫星学习

文章目录 Landsat-8 Landsat-8 由一台操作陆地成像仪 &#xff08;OLI&#xff09; 和一台热红外传感器 &#xff08;TIRS&#xff09;的卫星&#xff0c;OLI 提供 9 个波段&#xff0c;覆盖 0.43–2.29 μm 的波长&#xff0c;其中全色波段&#xff08;一般指0.5μm到0.75μm左…

【项目案例】物联网比较好的10+练手项目推荐,附项目文档/源码/视频

练手项目推荐 1 智能小车 项目功能介绍&#xff1a; 本项目由三部分组成&#xff1a;应用端&#xff08;微信小程序&#xff09;、设备端&#xff08;Hi3861&#xff09;、驱动端&#xff08;UPS&#xff09;。 1. 应用端&#xff0c;采用微信小程序作为应用端控制界面。在开…

修改Git配置信息:用户名

在Git中&#xff0c;用户名&#xff08;user.name&#xff09;和邮箱地址&#xff08;user.email&#xff09;是用于识别Git操作&#xff08;如提交&#xff09;的标识信息。如果你需要修改Git用户名&#xff0c;你可以通过Git命令行界面来修改这个设置。以下是具体的步骤&…

stm32单片机个人学习笔记7(TIM定时中断)

前言 本篇文章属于stm32单片机&#xff08;以下简称单片机&#xff09;的学习笔记&#xff0c;来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记&#xff0c;只能做参考&#xff0c;细节方面建议观看视频&#xff0c;肯定受益匪浅。 STM32入门教程-2023版 细…

上半年亏损扩大/百亿资产重组终止,路畅科技如何“脱困”?

在智能网联汽车市场形势一片大好的前提下&#xff0c;路畅科技上半年的营收却出现了下滑&#xff0c;并且亏损也进一步扩大。 2024年半年度报告显示&#xff0c;路畅科技营业收入1.35亿元&#xff0c;同比下滑7.83%&#xff1b;实现归属上市公司股东的净利润为亏损2491.99万元…