博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P4630 [APIO2018] Duathlon 铁人两项
阅读量:6138 次
发布时间:2019-06-21

本文共 1953 字,大约阅读时间需要 6 分钟。

思路

圆方树,一个点双中的所有点都可以被经过,所以给圆点赋值-1,方点赋值为圆点个数,统计圆点两两之间的路径权值和即可

代码

#include 
#include
#include
#include
using namespace std;int v2[100100*4],fir2[100100*2],nxt2[100100*4],cnt2;void addedge2(int ui,int vi){ ++cnt2; v2[cnt2]=vi; nxt2[cnt2]=fir2[ui]; fir2[ui]=cnt2;}int v[100100*4],fir[100100*2],nxt[100100*4],cnt;void addedge(int ui,int vi){ ++cnt; v[cnt]=vi; nxt[cnt]=fir[ui]; fir[ui]=cnt;}int fd_cnt,dfn[100100*2],low[100100*2],w_p[100100*2],dfs_clock;int S[100100*2],topx=0,n,m,num;void dfs(int u){ low[u]=dfn[u]=++dfs_clock; S[++topx]=u; num++; for(int i=fir[u];i;i=nxt[i]){ if(!dfn[v[i]]){ dfs(v[i]); low[u]=min(low[u],low[v[i]]); if(low[v[i]]==dfn[u]){ ++fd_cnt; w_p[fd_cnt]=0; for(int x=0;x!=v[i];topx--){ x=S[topx]; addedge2(fd_cnt,x); addedge2(x,fd_cnt); ++w_p[fd_cnt]; } addedge2(u,fd_cnt); addedge2(fd_cnt,u); ++w_p[fd_cnt]; } } else low[u]=min(low[u],dfn[v[i]]); }}int sz[100100*2];long long ans;void dfs(int u,int f){ sz[u]=(u<=n); for(int i=fir2[u];i;i=nxt2[i]){ if(v2[i]==f) continue; dfs(v2[i],u); ans+=2LL*w_p[u]*sz[u]*sz[v2[i]]; sz[u]+=sz[v2[i]]; } ans+=2LL*w_p[u]*sz[u]*(num-sz[u]); }int main(){ scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) w_p[i]=-1; for(int i=1;i<=m;i++){ int a,b; scanf("%d %d",&a,&b); addedge(a,b); addedge(b,a); } fd_cnt=n; for(int i=1;i<=n;i++) if(!dfn[i]){ num=0; dfs(i); topx--; dfs(i,0); } printf("%lld\n",ans); return 0;}

转载于:https://www.cnblogs.com/dreagonm/p/10766117.html

你可能感兴趣的文章
嵌入式,代码调试----GDB扫盲
查看>>
类斐波那契数列的奇妙性质
查看>>
配置设置[Django]引入模版之后报错Requested setting TEMPLATE_DEBUG, but settings are not configured....
查看>>
下一步工作分配
查看>>
Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)
查看>>
Wait Functions
查看>>
代码描述10313 - Pay the Price
查看>>
jQuery最佳实践
查看>>
centos64i386下apache 403没有权限访问。
查看>>
vb sendmessage 详解1
查看>>
jquery用法大全
查看>>
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>
网卡驱动程序之框架(一)
查看>>
css斜线
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
重新想象 Windows 8 Store Apps (18) - 绘图: Shape, Path, Stroke, Brush
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>