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

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

不经过重点,考虑点双

点双,考虑圆方树

两个点s,t,中间路径上,所有点双里的点都可以经过,特别地,s,t作为割点的时候,不能往后走,也就是不能经过身后的方点

也就是,(s,t)经过树上路径上的所有圆点和方点

把方点权值设为点双大小-2,圆点权值设为1,(s,t)路径上的权值就是c的选择方案数(不算s,t自己权值)

问题转化为:求树上任意点对的距离和,(x,y),(y,x)算两次

在转化为考虑每个点的贡献,树形DP即可

注意:

1.可能不连通

2.sz统计的是圆点的个数

3.最后乘2

#include
#define reg register int#define il inline#define numb (ch^'0')using namespace std;typedef long long ll;il void rd(int &x){ char ch;x=0;bool fl=false; while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true); for(x=numb;isdigit(ch=getchar());x=x*10+numb); (fl==true)&&(x=-x);}namespace Miracle{const int N=200000+5;const int M=200000+5;int n,m;struct node{ int nxt,to;}e[2*M];int hd[N],cnt;void add(int x,int y){ e[++cnt].nxt=hd[x]; e[cnt].to=y; hd[x]=cnt;}int dfn[N],df;int low[N];ll ans=0;int vis[N];int val[N];int typ[N];vector
mem[N];int num;int sta[N],top;void tarjan(int x){ typ[x]=1; val[x]=1; low[x]=dfn[x]=++df; sta[++top]=x; for(reg i=hd[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]){ ++num; int z; do{ z=sta[top]; mem[num].push_back(z); --top; }while(z!=y); mem[num].push_back(x); } }else low[x]=min(low[x],dfn[y]); }}int sz[2*N];int totsz=0;void fin(int x,int fa){ vis[x]=1; totsz+=typ[x]; for(reg i=hd[x];i;i=e[i].nxt){ int y=e[i].to; if(y==fa) continue; fin(y,x); }}void dfs(int x,int fa){ vis[x]=1; sz[x]=typ[x]; for(reg i=hd[x];i;i=e[i].nxt){ int y=e[i].to; if(y==fa) continue; dfs(y,x); sz[x]+=sz[y]; } ll tmp=totsz-sz[x]; for(reg i=hd[x];i;i=e[i].nxt){ int y=e[i].to;; if(y==fa) continue; ans=ans+tmp*sz[y]*val[x]; tmp+=sz[y]; }}int main(){ rd(n);rd(m); int x,y; for(reg i=1;i<=m;++i){ rd(x);rd(y); add(x,y);add(y,x); } for(reg i=1;i<=n;++i){ if(!dfn[i]) tarjan(i); } int tot=n; memset(hd,0,sizeof hd); cnt=0; //cout<<" num "<
<

 

转载于:https://www.cnblogs.com/Miracevin/p/10382173.html

你可能感兴趣的文章
RHEL6.3基本网络配置(1)ifconfig命令
查看>>
网络诊断工具之—路由追踪tracert命令
查看>>
Java模拟HTTP的Get和Post请求(增强)
查看>>
php 环境搭建(windows php+apache)
查看>>
让虚拟机的软盘盘符不显示(适用于所有windows系统包括Windows Server)
查看>>
Cygwin不好用
查看>>
jQuery插件之验证控件jquery.validate.js
查看>>
[经验]无线鼠标和无线键盘真的不能用了?——雷柏的重生之路~
查看>>
【转】plist涉及到沙盒的一个问题
查看>>
GNU make manual 翻译( 一百四十五)
查看>>
重构之美-走在Web标准化设计的路上[复杂表单]3 9 Update
查看>>
linux中的优先搜索树的实现--prio_tree【转】
查看>>
转载: 打造自己的asp.net验证控件
查看>>
重构之美-跨越Web标准,触碰语义网[开门见山:Microformat]
查看>>
git入门与实践【转】
查看>>
WPF 虚拟键盘
查看>>
储存卡无法打开专家教您怎么数据恢复
查看>>
彼得原理
查看>>
如何利用【百度地图API】,制作房产酒店地图?(下)——结合自己的数据库...
查看>>
[20171113]修改表结构删除列相关问题3.txt
查看>>