首页 > 其他分享 >2022.10.5 总结

2022.10.5 总结

时间:2022-10-05 16:35:01浏览次数:57  
标签:总结 LL father include 2022.10 sum dp mod

A

初始时只有 \(a_k=1\),有 \(m\) 次操作,每次交换 \(a_u,a_v\) 的值,问忽略多少次操作可以使最终 \(a_i=1\).
简单DP即可。

code
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int N=1e5+10,inf=2e9;
int n,m,k,a[N],b[N],dp[N];
int main() {
	scanf("%d%d%d",&n,&k,&m);
	for(int i=1; i<=m; i++) scanf("%d%d",&a[i],&b[i]);
	if(m==0) {
		for(int i=1; i<=n; i++) 
			if(i==k) printf("0 ");
			else printf("-1 ");
		return 0;
	}
	for(int i=1; i<=n; i++) dp[i]=inf;
	dp[k]=0; 
	for(int i=1; i<=m; i++) {
		int x=a[i],y=b[i];
		if(x==y) continue;
		int t=dp[x];
		dp[x]=min(dp[x]+1,dp[y]);
		dp[y]=min(dp[y]+1,t);
	}
	for(int i=1; i<=n; i++) printf("%d ",dp[i]>=inf?-1:dp[i]);
	return 0;
}

B

问树的每条边分别删去(询问独立),剩下两个部分每个部分中连通块的数量。
换根DP即可。
原始方程,\(u\) 为子树根时: \(s_u=\prod (1+s_v)\)
换根方程,\(u\) 为总树根时:\(dp_u=s_u*(\dfrac{dp_f}{1+s_u}+1)\)

code

#include<algorithm>
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long LL;
const LL N=5e5+10,mod=998244353;
LL n,tot,head[N],ver[2*N],nxt[2*N],fu[N],fv[N];
LL s[N],depth[N],dp[N],sum[N];
void addedge(LL x,LL y) {
	ver[++tot]=y;
	nxt[tot]=head[x];
	head[x]=tot;
}
void DFS(LL u,LL father) {
	s[u]=1;
	depth[u]=depth[father]+1;
	for(LL i=head[u]; i; i=nxt[i]) {
		LL v=ver[i];
		if(v==father) continue;
		DFS(v,u);
		s[u]=s[u]*(1+s[v])%mod;
		sum[u]+=sum[v];
	}
	sum[u]=(sum[u]+s[u])%mod;
}
LL exgcd(LL a,LL b,LL &x,LL &y) {
	if(b==0) {x=1; y=0; return a;}
	LL g=exgcd(b,a%b,x,y),z=x;
	x=y; y=z-(a/b)*x;
	return g;
}
LL f(LL a,LL b) {
	LL d,y;
	exgcd(b,mod,d,y);
	return (a*d%mod+mod)%mod;
}
void dfs2(LL u,LL father) {
	if(u!=1) dp[u]=s[u]*(f(dp[father],s[u]+1)+1)%mod;
	else dp[u]=s[u];
	for(LL i=head[u]; i; i=nxt[i]) {
		LL v=ver[i];
		if(v==father) continue;
		dfs2(v,u);
	}
}
signed main() {
	freopen("cut.in","r",stdin);
	freopen("cut.out","w",stdout);
	scanf("%lld",&n);
	for(LL i=1; i<n; i++) {
		scanf("%lld%lld",&fu[i],&fv[i]);
		addedge(fu[i],fv[i]);
		addedge(fv[i],fu[i]);
	}
	DFS(1,1);
	dfs2(1,1);
	for(LL i=1; i<n; i++) {
		LL u=fu[i],v=fv[i];
		if(depth[u]>depth[v]) {
			printf("%lld %lld\n",sum[u]%mod,(sum[1]-sum[u]-(dp[v]-f(dp[v],s[u]+1))+10000*mod)%mod);
		} else {
			printf("%lld %lld\n",(sum[1]-sum[v]-(dp[u]-f(dp[u],s[v]+1))+10000*mod)%mod,sum[v]%mod);
		}
	}
	return 0;
}

标签:总结,LL,father,include,2022.10,sum,dp,mod
From: https://www.cnblogs.com/Simon-Gao/p/16755760.html

相关文章

  • 2022.10.05考试总结
    2022.10.05考试总结得分:\(280/400\)总结:今天考试题目比较简单,第一,二题都是结论题,第三题在考场上因为没有考虑到有五十位导致挂了\(50\)分,第四题想到了正解,但是考试的时候......
  • 2022.10.5 若干代数题
    链接对\(\foralla,b,c\ge0\)且满足\((a^2+b^2)(b^2+c^2)(c^2+a^2)=2\),求\(a+b+c\)的最值思考三元换二元链接对\(a,b,c\ge0\)且\(ab+bc+ca=1\),求\[P=\frac{a......
  • 大数据总结
    一开始以为只要装zookeeper和hadoop还有hbase,没想到还有很多要装的。于是这周又装了sqoop,hive,kafka,spark(有带hadoop依赖版和不带的)也可以都用brew装,挺方便的,就是说去官网......
  • 2022.10.5 模拟赛
    T1签到题题面Description给定\(n\)个数,求出这\(n\)个数的一个非空子集,使得这个子集中的数的和能被\(n\)整除,无解输出\(-1\).Input第一行为数据组数\(T\)接下来\(T\)......
  • 关于PCS7服务器-客户机项目的画面树的一点总结
    服务器与客户端的画面树是独立的!客户机的画面树并不是从服务器上分配过去的。OSClient的画面树需在OS1中组态,其他参考站OSClientreference的仅参考OS1的画面树;服务器的......
  • 小猪学Java篇十九(Java基础语法------------Java基础语法总结)
    Java基础语法总结一,大纲:所学内容 (一),注释,标识符,关键字(二)、数据类型(三),类型转换(四),变量,常量(五),运算符(六),包机制,JavaDoc  二,逐个回顾(一),注释,标识符,关键......
  • 2022.10.5java特性和优势
    Java构建工具:Ant,Maven,Jekins应用服务器:Tomcat,Jettty,Jboss,Websphere,weblogicWeb开发:Struts,Spring,Hibernate,myBatis开发工具:Eclipse,Netbean,intellij......
  • 目标检测多模型集成方法总结
    作者:VikasSShetty编译:ronghuaiyang(AI公园)导读模型集成是一种提升模型能力的常用方法,但通常也会带来推理时间的增加,在物体检测上效果如何,可以看看。介绍集成机器学习模型是......
  • 2022-2023-1 20221312 《计算机基础与程序设计》第五周学习总结
    作业信息班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK05作业要求:C语言变量基础知识,pep......
  • Java泛型总结
     为什么会有泛型?泛型是用来干什么的?泛型其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛......