口胡题fr
T1
五种贡献恶心的要死。
$1.grand$
$2.father$
$3.brother$
$4.son$
$5.grandson$
我们选择维护三个量。
1.儿子和,$sx$
2.孙子和,$gsx$
3.自己的值,$a$
那么每次修改只需要修改自己的值,父亲的儿子和,爷爷的孙子和即可,注意儿子和孙子分开考虑。
那么查询的时候。设当前点为$x$,父亲为$f$,爷爷为$g$.
那么答案就是
$$ans=a[x]\ xor\ sx[x]\ xor\ gsx[x]\ xor\ sx[fa]\ xor\ a[x]\ xor\ a[g]$$
T2.
看一下数据范围:猜一下是$O(3^n)$
子集题我首先考虑了子集反演。
设$g[S]$为交集是$S$的子集情况下的方案数,$f[S]$是恰好的方案数。
$$g[S]=\sum\limits_{T\subseteq S}f[T]$$
反演得到。
$$f[S]=\sum\limits_{T\subseteq S}(-1)^{\left|S\right|-\left|T\right|}g[T]$$
发现根本不可做,因为交集是子集的集合根本算不出来。
考虑补集容斥。
那么我们需要让两个点能到的点没有交集即可。
因为两个点必然有自己能到的范围,所以枚举到达集合,然后让两个集合之间没有交点就可以了。
考虑构造这样两个集合,并算出方案。
$dp[S]$让$1$到达$S$中的点的方案数。
$g[S]$让$2$到达的方案数。
预处理数组$e[S]$为$S$中的边数。
设$mx$为全集。
枚举$1$所在的集合$T$得到:
$$dp[S]=2^{e[S]}-\sum\limits_{T\subseteq S}dp[T]2^{e[S\ xor\ T]}$$
$g$的转移也类似。
在统计答案的时候,枚举全集的子集$S$,同时枚举$S$补集的子集,同样原理转移即可。
$$ans=2^{e[mx]}-\sum\limits_{S\subseteq mx}\sum\limits_{T\subseteq mx\ xor\ S}dp[S]g[T]2^{e[mx\ xor\ S\ xor\ T]}$$
复杂度是$O(3^n)$
和wmz的暴力对拍结果,n=8,m=22。
T3不会.
D2T1.
其实就是只有以下一种情况是最优的,每个点有且仅有一条边没有被查看,并且这些边的和最大且为$S$
$$ans=\sum\limits{i=1}^{m}w_i-S$$
发现这些没有被查看的边形成了一颗最大生成树。
总权减树权即可。
复杂度$O(mlogm)$
D2T2.
其实是个比菜肴制作还简单的菜肴制作。
我们首先算出每个点的点权$dep[x]+a[x]$。
然后建反图跑堆拓扑即可。
原本我们是想让权值大的尽量考前。
而反图这种情况等价于让点权最小的尽量靠后,那么我们可以这样跑拓扑。
假设某个点是倒数第$i$个到达的,那么每个点权更新答案的值就是:$n-i+a[x]$。
时间复杂度$O(nlogn)$
和爆搜对拍过了n=10的点。
和wmz乱搞对拍过了n=300000,INF=1e9的点。
#include<iostream> #include<cstdio> using namespace std; inline void read(int &x) { x=;char c=getchar(); ') c=getchar(); )+(x<<)+c-,c=getchar(); } <<|,maxn=,mod=1e9+; ],e[bitn],dp[][bitn],bin[maxn],hs[bitn]; int add(int x,int y) {return x+y>=mod?x+y-mod:x+y;} int mul(int x,int y) {return 1LL*x*y%mod;} ?x-y+mod:x-y;} void print(int s) { ;i<=n;++i) ]) putchar('); '); } int main() { read(n);read(m); ]=;i<=max(n,m);++i) bin[i]=mul(bin[i-],); ;i<=m;++i) read(op[i][]),read(op[i][]); <<n)-; ;s<=mx;++s) ;i<=m;++i) { ]-])&&(s&bin[op[i][]-])) ++e[s]; ]-]) hs[s]|=bin[op[i][]-]; ]-]) hs[s]|=bin[op[i][]-]; } ;st<=;++st) ;s<=mx;++s) ])) { dp[st][s]=bin[e[s]]; )&s;t;t=(t-)&s) if(t&bin[st]) dp[st][s]=dic(dp[st][s],mul(dp[st][t],bin[e[s^t]])); } ans=bin[e[mx]]; ;s<=mx;++s) ])&&!(s&bin[])) )&(mx^s)) ])&&!(hs[s]&t)) ans=dic(ans,mul(mul(dp[][s],dp[][t]),bin[e[mx^s^t]])); printf("%d\n",ans); ; }
国际影星
#include<iostream> #include<cstdio> #include<algorithm> #include<queue> #include<cstring> using namespace std; ; inline void read(int &x) { x=;char c=getchar(); ') c=getchar(); )+(x<<)+c-,c=getchar(); } int ans,n,tot,a[maxn],first[maxn],f[maxn],d[maxn]; struct Road{ int u,t,nxt; }eage[maxn<<]; void add(int x,int y) {eage[++tot]=(Road){x,y,first[x]};first[x]=tot;} struct st{ int id,x; bool friend operator < (const st a,const st b) {return a.x>b.x;} }; priority_queue<st> q; void dfs(int x,int fa,int d) { a[x]+=d;f[x]=fa; for(int i=first[x];i;i=eage[i].nxt) if(eage[i].t!=fa) dfs(eage[i].t,x,d+); } void topsort() { int cnt=n; q.push((st){,a[]}); while(!q.empty()) { st x=q.top();q.pop();--cnt; ans=max(ans,cnt+a[x.id]); for(int i=first[x.id];i;i=eage[i].nxt) { --d[eage[i].t]; if(!d[eage[i].t]) q.push((st){eage[i].t,a[eage[i].t]}); } } } int main() { // freopen("ans.in","r",stdin); // freopen("c.out","w",stdout); read(n); ;i<=n;++i) read(a[i]); ,x,y;i<n;++i) { read(x);read(y); add(x,y);add(y,x); } dfs(,,); tot=; memset(first,,sizeof(first)); ;i<=n;++i) add(f[i],i),++d[i]; topsort(); printf("%d\n",ans); ; }
口胡题fr的更多相关文章
- NOIP2016考前做题(口胡)记录
NOIP以前可能会持续更新 写在前面 NOIP好像马上就要到了,感觉在校内训练里面经常被虐有一种要滚粗的感觉(雾.不管是普及组还是提高组,我都参加了好几年了,结果一个省一都没有,今年如果还没有的话感觉 ...
- Topcoder口胡记 SRM 562 Div 1 ~ SRM 599 Div 1
据说做TC题有助于提高知识水平? :) 传送门:https://284914869.github.io/AEoj/index.html 转载请注明链接:http://www.cnblogs.com/B ...
- 口胡FFT现场(没准就听懂了)&&FFT学习笔记
前言(不想听的可以跳到下面) OK.蒟蒻又来口胡了. 自从ZJOI2019上Day的数论课上的多项式听到懵逼了,所以我就下定决心要学好多项式.感觉自己以前学的多项式都是假的. 但是一直在咕咕,现在是中 ...
- Atcoder/Topcoder 口胡记录
Atcoder/Topcoder 理论 AC Atcoder的❌游戏示范 兴致勃勃地打开一场 AGC 看 A 题,先 WA 一发,然后花了一年时间 Fix. 看 B 题,啥玩意?这能求? 睡觉觉. e ...
- 关于有向图走“无限次”后求概率/期望的口胡/【题解】HNCPC2019H 有向图
关于有向图走"无限次"后求概率/期望的口胡/[题解]HNCPC2019H 有向图 全是口胡 假了不管 讨论的都是图\(G=(V,E),|V|=n,|E|=m\)上的情况 " ...
- PKUSC 2022 口胡题解
\(PKUSC\ 2022\)口胡题解 为了更好的在考试中拿分,我准备学习基础日麻知识(为什么每年都考麻将 啊啊啊) 首先\(STO\)吉老师\(ORZ,\)真的学到了好多 观察标签发现,这套题覆盖知 ...
- BZOJ 口胡记录
最近实在是懒的不想打代码...好像口胡也算一种训练,那就口胡把. BZOJ 2243 染色(树链剖分) 首先树链剖分,然后记录下每个区间的左右端点颜色和当前区间的颜色段.再对每个节点维护一个tag标记 ...
- 「口胡题解」「CF965D」Single-use Stones
目录 题目 口胡题解 题目 有许多的青蛙要过河,可惜的是,青蛙根本跳不过河,他们最远只能跳 \(L\) 单位长度,而河宽 \(W\) 单位长度. 在河面上有一些石头,距离 \(i\) 远的地方有 \( ...
- 【杂题】[CodeForces 1172E] Nauuo and ODT【LCT】【口胡】
Description 给出一棵n个节点的树,每个点有一个1~n的颜色 有m次操作,每次操作修改一个点的颜色 需要在每次操作后回答树上\(n^2\)条路径每条路径经过的颜色种类数和. \(n,m< ...
随机推荐
- 【线性表基础】顺序表和单链表的插入、删除等基本操作【Java版】
本文表述了线性表及其基本操作的代码[Java实现] 参考书籍 :<数据结构 --Java语言描述>/刘小晶 ,杜选主编 线性表需要的基本功能有:动态地增长或收缩:对线性表的任何数据元素进行 ...
- 并发编程之原子操作Atomic&Unsafe
原子操作:不能被分割(中断)的一个或一系列操作叫原子操作. 原子操作Atomic主要有12个类,4种类型的原子更新方式,原子更新基本类型,原子更新数组,原子更新字段,原子更新引用.Atomic包中的类 ...
- Spring Boot 常用注解汇总
一.启动注解 @SpringBootApplication @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documen ...
- 计算几何基础算法几何C++实现
This file is implementation of Common Common Computational Geometry Algorithms.Please please pay att ...
- Poco XMLconfiguration 解析xml配置文件
环境: Centos7 GCC: 7.3.0 准备需要读取的xml文件: <config> <prop1>1.23</prop1> <prop2>2.3 ...
- 从.NET CORE2.2升级到3.0过程及遇到的一些问题
RoadFlow工作流引擎从.NET Core2.2升级到3.0遇到了一些问题及解决方式这里记录一下. 1.DLL项目框架从2.2选择到3.0,这个没什么好说的,没有问题.重点的WEB层的一些变化. ...
- 如何更快理解和运用服务编排?(使用Goku API Gateway实现)
上一篇博客 未来实现API管理系统的几个关键词 发布后,有不少读者私信我,让我写一篇实际运用的文章,我周末趁着有空写了这篇有关“服务编排”的文章.用的是Goku API Gateway进行演示, 希望 ...
- SDRAM
环境:STM32F769discovery板 SDRAM芯片:用的MT48LC4M32B2B5-6A 16Mbyte (sdram和flash一般标的容量都是bit) 硬件图: 第一步 配置FM ...
- opencv::点多边形测试
点多边形测试 测试一个点是否在给定的多边形内部,边缘或者外部 double pointPolygonTest( InputArray contour, // 输入的轮廓 Point2f pt, // ...
- cinatra::http框架编译使用
cinatra 一个高效易用的c++ http框架 1.下载源码 https://github.com/qicosmos/cinatra 2. vs2017 编译boost库 [msvc-14.1] ...