题面

建立圆方树,考虑所有路径,发现路径上原来的点双(现在的方点)里的点都可以做中间点。但是路径上被方点夹着的圆点被计重了,要扣掉;枚举的两个端点也被算进去了,要扣掉。所以直接将方点权值设为点双大小,圆点权值设为-1,所有圆点间路径权值和的和即为答案

注意图可能不连通,草(汉语)

 #include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=;
int n,m,r,c,t1,t2,cnt,Cnt,tot,top; long long sum,ans;
int dfn[N],low[N],col[N],isc[N],stk[N],siz[N],dis[N];
int p[N],noww[M],goal[M],P[N],Noww[M],Goal[M],val[N];
vector<int> ve[N];
void Link(int f,int t)
{
noww[++cnt]=p[f];
goal[cnt]=t,p[f]=cnt;
noww[++cnt]=p[t];
goal[cnt]=f,p[t]=cnt;
}
void Linka(int f,int t)
{
Noww[++Cnt]=P[f];
Goal[Cnt]=t,P[f]=Cnt;
Noww[++Cnt]=P[t];
Goal[Cnt]=f,P[t]=Cnt;
}
void Tarjan_PBC(int nde)
{
int tep=; stk[++top]=nde;
dfn[nde]=low[nde]=++tot;
for(int i=p[nde];i;i=noww[i])
if(!dfn[goal[i]])
{
Tarjan_PBC(goal[i]);
low[nde]=min(low[nde],low[goal[i]]);
if(dfn[nde]<=low[goal[i]])
{
if(nde!=r||++tep>) isc[nde]=true;
int tmp; c++;
do
{
tmp=stk[top--],col[tmp]=c;
ve[c].push_back(tmp);
}while(tmp!=goal[i]);
ve[c].push_back(nde);
}
}
else low[nde]=min(low[nde],dfn[goal[i]]);
}
void DFS(int nde,int fth)
{
if(nde<=n) siz[nde]=;
for(int i=P[nde];i;i=Noww[i])
if(Goal[i]!=fth) DFS(Goal[i],nde),siz[nde]+=siz[Goal[i]];
}
void Getans(int nde,int fth)
{
long long tmp=;
int sizz=tot-siz[nde];
for(int i=P[nde];i;i=Noww[i])
if(Goal[i]!=fth)
{
int G=Goal[i],S=siz[G];
tmp+=1ll*sizz*S,sizz+=S;
Getans(Goal[i],nde);
}
if(nde<=n) ans-=(tmp+tot-)*;
else ans+=*tmp*val[nde];
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
scanf("%d%d",&t1,&t2),Link(t1,t2);
for(int i=;i<=n;val[i]=-,i++)
if(!dfn[i]) r=i,Tarjan_PBC(i);
for(int i=;i<=c;i++)
{
val[n+i]=ve[i].size();
for(int j=;j<val[n+i];j++)
Linka(n+i,ve[i][j]);
}
for(int i=;i<=n;i++)
if(!siz[i]) DFS(i,),tot=siz[i],Getans(i,);
printf("%lld",ans);
return ;
}

解题:APIO 2018 铁人两项的更多相关文章

  1. 【APIO2018】铁人两项(圆方树,动态规划)

    [APIO2018]铁人两项(圆方树,动态规划) 题面 UOJ 洛谷 BZOJ 题解 嘤嘤嘤,APIO的时候把一个组合数写成阶乘了,然后这题的70多分没拿到 首先一棵树是很容易做的,随意指定起点终点就 ...

  2. [Luogu4630][APIO2018]Duathlon 铁人两项

    luogu 题目描述 比特镇的路网由 \(m\) 条双向道路连接的 \(n\) 个交叉路口组成. 最近,比特镇获得了一场铁人两项锦标赛的主办权.这场比赛共有两段赛程:选手先完成一段长跑赛程,然后骑自行 ...

  3. 【APIO2018】铁人两项

    [APIO2018]铁人两项 题目描述 大意就是给定一张无向图,询问三元组\((s,c,f)\)中满足\(s\neq c\neq f\)且存在\((s\to c\to f)\)的简单路径(每个点最多经 ...

  4. 【刷题】LOJ 2587 「APIO2018」铁人两项

    题目描述 比特镇的路网由 \(m\) 条双向道路连接的 \(n\) 个交叉路口组成. 最近,比特镇获得了一场铁人两项锦标赛的主办权.这场比赛共有两段赛程:选手先完成一段长跑赛程,然后骑自行车完成第二段 ...

  5. [APIO2018] Duathlon 铁人两项 圆方树,DP

    [APIO2018] Duathlon 铁人两项 LG传送门 圆方树+简单DP. 不会圆方树的话可以看看我的另一篇文章. 考虑暴力怎么写,枚举两个点,答案加上两个点之间的点的个数. 看到题面中的一句话 ...

  6. [APIO2018]铁人两项 --- 圆方树

     [APIO2018] 铁人两项 题目大意: 给定一张图,问有多少三元组(a,b,c)(a,b,c 互不相等)满足存在一条点不重复的以a为起点,经过b,终点为c的路径 如果你不会圆方树 ------- ...

  7. [APIO2018]铁人两项 [圆方树模板]

    把这个图缩成圆方树,把方点的权值设成-1,圆点的权值设成点双的size,算 经过这个点的路径的数量*这个点的点权 的和即是答案. #include <iostream> #include ...

  8. [APIO2018]铁人两项——圆方树+树形DP

    题目链接: [APIO2018]铁人两项 对于点双连通分量有一个性质:在同一个点双里的三个点$a,b,c$,一定存在一条从$a$到$c$的路径经过$b$且经过的点只被经过一次. 那么我们建出原图的圆方 ...

  9. 【APIO 2018】铁人两项(圆方树)

    题目链接 题意大概是,求有多少三元组$(s,c,f)(s \neq c, c \neq f, s \neq f)$,满足从$s$到$f$有一条简单路径经过$c$. 得到结论: 点双中任意互不相同的三个 ...

随机推荐

  1. 2017-2018-2 20155203《网络对抗技术》Exp5 MSF基础应用

    1.实践过程记录 1.1一个主动攻击实践,如ms08_067; msf > search ms08_067_netapi //查看可以用的工具 [!] Module database cache ...

  2. 20155218 Exp1 PC平台逆向破解(5)M

    20155218 Exp1 PC平台逆向破解(5)M 1. 掌握NOP.JNE.JE.JMP.CMP汇编指令的机器码 NOP:NOP指令即"空指令".执行到NOP指令时,CPU什么 ...

  3. 微信小程序之分享或转发功能(自定义button样式)

    小程序页面内发起转发 通过给 button 组件设置属性open-type="share",可以在用户点击按钮后触发 Page.onShareAppMessage 事件,如果当前页 ...

  4. docker之容器数据持久化

    1.挂载本地目录为容器的数据存放目录 [root@node03 ~]# docker run -itd --name web01 -v /container_data/web:/data ubuntu ...

  5. git 和 github 链接

    第一步  再电脑上安装git 请自行搜索   到你需要的一个目录下:例如/gittest 首先创建文件,然后  git  add  和 git commit  不然直接查看  git branch - ...

  6. Linux第七周学习总结——可执行程序的装载

    Linux第七周学习总结--可执行程序的装载 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/course/ ...

  7. “数学口袋精灵”第二个Sprint计划(第五天)

    “数学口袋精灵”第二个Sprint计划----第五天进度 任务分配: 冯美欣:欢迎界面的背景音乐完善 吴舒婷:游戏界面的动作条,选择答案后的音效 林欢雯:代码算法设计 进度:   冯美欣:欢迎界面背景 ...

  8. 使用HTTP协议向服务器传参的方式及django中获取参数的方式

    使用HTTP协议向服务器传参的四种方式 URL路径携带参数,形如/weather/beijing/2018; 查询字符串(query string),形如key1=value1&key2=va ...

  9. VMware虚拟机安装ghost win7系统方法

    原本地址:http://www.xitongcheng.com/jiaocheng/xtazjc_article_15314.html

  10. [转帖]Windows10七大版本区别在哪?

    Windows10七大版本区别在哪? http://os.51cto.com/art/201804/570132.htm 一.Windows10家庭版 对于绝大多数用户来说,最后可能获得的应该就是Wi ...