首页 > 其他分享 >[CF235D] Graph Game

[CF235D] Graph Game

时间:2023-09-18 23:44:38浏览次数:55  
标签:include int Graph de fa Game MAXN now CF235D

Graph Game
乌克兰逃兵在线发题解。


好像要用期望去推,但是像我这种看到序列的期望题只想得到线性性的弱鸡只能感理了。
我们把点分治过程当成点分树,y 能在 x 被爆时做贡献当且仅当 y 为 x 的子树。
先考虑树的情况。
考虑把遍历 t 的次数分到单个点上发现仅当 x 为 x->y 路径上第一个被爆的点时 y 会在这时被计一次。
所以 Ans+=\(\frac{1}{dis_{i,j}+1}\)。
再考虑基环树,仅经过环的路径的算法有区别。
设环上有两条路径 l1,l2,分别按树的方法计算,算重在于 l1,l2 上的点都不在 y 前爆破 x 的贡献算了两次。
所以 Ans-=\(\frac{1}{l1+l2}\)。

#include<cstdio>
#include<vector>
#include<cmath>
#include<iostream>
using namespace std;
#define db double
const int MAXN=3002;
const int N=15;
int n,cnt,head[MAXN],fa[MAXN][N],tp[MAXN],f[MAXN],top,la[MAXN],c[MAXN],c1,de[MAXN],wz[MAXN];
bool ck,vis[MAXN];
db Ans;
int Find(int x){return x==f[x]?x:f[x]=Find(f[x]);}
struct ren{int nxt,to;}a[MAXN<<1];
void add(int x,int y){a[++cnt].to=y;a[cnt].nxt=head[x];head[x]=cnt;}
bool dfs(int now,int F){
	la[now]=F;
	for(int i=head[now];i;i=a[i].nxt){
		if(ck) break;
		int u=a[i].to;
		if(u==F) continue;
		int fx=Find(now),fy=Find(u);
		if(fx==fy){
			int op=now;
			while(op!=u){
				c[++c1]=op;vis[op]=1;
				op=la[op];
			}
			c[++c1]=op;vis[op]=1;
			return 1;
		}
		f[fy]=fx;
		ck|=dfs(u,now);
	}
	return ck;
}
int LCA(int x,int y){
	if(de[x]>de[y]) swap(x,y);
	for(int i=12;i>=0;i--){
		if(de[fa[y][i]]>=de[x]) y=fa[y][i];
	}
	if(x==y) return  x;
	for(int i=12;i>=0;i--){
		if(fa[x][i]!=fa[y][i]) x=fa[x][i],y=fa[y][i];
	}
	return fa[x][0];
}
void dfs1(int now,int F){
	tp[now]=top;
	for(int i=head[now];i;i=a[i].nxt){
		int u=a[i].to;
		if(vis[u]||u==F) continue;
		de[u]=de[now]+1;fa[u][0]=now;
		for(int j=1;j<=12;j++) fa[u][j]=fa[fa[u][j-1]][j-1];
		dfs1(u,now);
	}
}
int main(){
	scanf("%d",&n);
	for(int i=1,x,y;i<=n;i++){
		scanf("%d%d",&x,&y);x++;y++;add(x,y);add(y,x);f[i]=i;
	}
	dfs(1,0);
	for(int i=1;i<=c1;i++){
		top=c[i];dfs1(c[i],0);wz[c[i]]=i;
	}
	for(int x=1;x<=n;x++){
		for(int y=1;y<=n;y++){
//			if(x==y) continue;注意自己可以爆自己... 
			if(tp[x]==tp[y]){
				Ans+=1.0/(1.0*(de[x]+de[y]-2*de[LCA(x,y)]+1));continue;
			}
			int l1=de[x]+de[y]+2,l2=abs(wz[tp[x]]-wz[tp[y]])-1,l3=c1-l2-2;
			Ans+=1.0/(1.0*(l1+l2));Ans+=1.0/(1.0*(l1+l3));Ans-=1.0/(1.0*(l1+c1-2));
		}	
	}
	printf("%.7lf",Ans);
	return 0;
}

标签:include,int,Graph,de,fa,Game,MAXN,now,CF235D
From: https://www.cnblogs.com/StranGePants/p/17713436.html

相关文章

  • Precomputed Radiance Transfer(games202)
    PrecomputedRadianceTransfer(games202)关于BRDF可以看看这篇文章基于物理着色:BRDF物体在不同光照下的表现不同,PRT(PrecomputedRadianceTransfer)是一个计算物体在不同光照下表现的方法。光线在一个环境中,会经历反射,折射,散射,甚至还会物体的内部进行散射。为了模拟具有真实......
  • linux系统docker容器部署项目字体问题-Graphics2D在容器里面不显示字体
    继上一个博客中生成签章图片后,今日遇到一个问题,本地不管如何改代码,都会将签名文字显示出来。但是...........一旦部署在linux系统后,一直打印不出来,,纠结的呀。。完全没想到,原来是linux系统里面不兼容本地的字体,也就是没有那么多中文字体,除非安装。可以惊醒安装字体:参考文档:http:......
  • ACL2022 paper1 CAKE: A Scalable Commonsense-Aware Framework for Multi-View Knowl
    CAKE:用于多视域知识图谱补全的可扩展常识感知框架ACL2022Abstract  知识图谱存储大规模事实三元组,然而不可避免的是图谱仍然具有不完整性。(问题)以往的只是图谱补全模型仅仅依赖于事实域数据进行实体之间缺失关系的预测,忽略了宝贵的常识知识。以往的知识图嵌入技术存在无效负......
  • CF662B Graph Coloring
    很一眼的题考虑枚举最后所有边的颜色,然后每个点是否变化可以用一个bool变量表示,就是个很典的2-SAT问题,根据当前边和目标的颜色相同与否连边即可但这题的难点在于要找一个操作次数最少的方案,乍一看很难搞但如果你对图论和2-SAT那一套理解比较深的话就很容易发现,这道题中所有边都......
  • HDU 1054 Strategic Game 树形DP/二分图匹配
    第一次写博文,想了半天就拿一道dp/graph的题作为处作吧此题有两种常见解法(题意比较简单,就不赘述)1.二分图最大匹配       此题等价于问一棵树中最小点覆盖数。树形结构可以把它看做是一个二分图,一个点集为奇数层,另一个点集为偶数层,显然满足二分图定义,可以套用求二分图最小点......
  • Epic Games Launcher 提示 应用程序无法正常启动(0xc000007b)
    事件起因:在给某同事安装EpicGamesLauncher报错,提示应用程序无法正常启动(0xc000007b) 解决办法: 用DirectX修复工具扫一下,修复一下C++插件,一般是由于MicrosoftVisualC++2017缺失或未正确引用引起的......
  • TuGraph Analytics流图计算之行为路径归因
    GeaFlow(品牌名TuGraph-Analytics)已正式开源,欢迎大家关注!!!欢迎给我们Star哦!GitHub......
  • 如何实现一个数据库的 UDF?图数据库 NebulaGraph UDF 功能背后的设计与思考
    大家好,我是来自BOSS直聘的赵俊南,主要负责安全方面的图存储相关工作。作为一个从v1.x用到v3.x版本的忠实用户,在见证NebulaGraph发展的同时,也和它一起成长。BOSS直聘和NebulaGraph关于NebulaGraph在BOSS直聘的应用场景,大家可以看看之前文洲老师的文章(图数据库NebulaGr......
  • [VLDB 2012]Efficient Subgraph Matching on Billion Node Graphs
    [VLDB2012]EfficientSubgraphMatchingonBillionNodeGraphs重点了解实现star-join的具体过程。分解query和STwigs排序文中把star叫做STwigs,每一个STwigs查询为\(q=(r,L)\),其中r是跟节点标签,L是子节点标签合集。点的选择性:\(f(v)=deg(v)/freq(v.label)\)分解算法:每次......
  • 数据库重构之路,以 OrientDB 到 NebulaGraph 为例
    “本文由社区用户@阿七从第一视角讲述其团队重构图数据库的过程,首发于阿七公众号「浅谈架构」”原文出处:https://mp.weixin.qq.com/s/WIJNq-nuuAGtMjYo5rPLyg一、写在前面读过我公众号文章的同学都知道,我做过很多次重构,可以说是“重构钉子户”,但是这次,重构图数据库OrientDB......